继承,多态,抽象类,接口

大兔子大兔子 提交于 2019-12-17 09:04:28

 

进化表

继承---->多态---->抽象类---->接口

继承关键字:extends

子类将会继承父类所有的功能

例如:

class Person{

    private String name;

    private int age;

    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name = name;
    }

    public int getAge(){
        return age;
    }

    public void setAge(int name){
        this.age = age;
    }
    
}

class Student extends Person{
 //Student 继承了 Person,有Person所有的功能
}

class Test{
    public static void main(String[] args){
        Student stu = new Student();
        stu.setAge(18);
        System.out.print(stu.getAge());
    }
}

在java中 没有写extends ,编译器会自动加上 extends Object  .

任何类 都会继承Object类,也就是说Object类 是所有类的父类

 

向上转型:

Person p = new Student();

因为Student继承自Person ,具有Person所有的功能,所以这种方式是可以的

向下转型

Person p = new Student();

Student s = (Student)p;

 

向下转型有可能会失败,例如:

Person person = new Person();

Student s = (Student)person;

失败JVM会报ClassCastException

 

多态:

在继承的基础上

多态是指针对某个类型方法的调用,其真正执行的方法取决于运行时期实际类型的方法

 

抽象类:

由于父类的方法没有实际意义,可以去掉方法的执行语句

abstract class Person{

    public  abstract void run();

}

如果一个class定义了方法,但是没有具体的执行代码,这个方法就是抽象方法,用abstarct修饰

用abstarct修饰的类 就是抽象类

抽象类无法实例化

那不能被实例化的抽象类有什么用呢?

因为抽象类被设计成只能用于继承,可以强迫子类实现其定义的抽象方法,起到一定的“规范”作用

例如:

抽象类Person定义了run方法,那么其子类Student就必须override run方法;

面向抽象编程的本质:

上层代码只定义规范

不需要子类就可以实现业务逻辑

具体的业务逻辑由不同的子类实现,调用者并不关心;

 

 

接口:

接口就是抽象类的进化 版

如果一个抽象类没有字段,所有的方法都是抽象方法,那就可以把这个抽象类改为接口

抽象类:

abstract class Person{

    public abstract void run();

    public abstract String getName();

}

接口:

Interface Person{

    void run();

    String getName();

}

一个类只能继承另一个类,但是可以实现多个接口

接口也可以继承接口,相当与扩展了接口的方法

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!