- 多态概述:某一个事物,在不同时刻表现出来的不同状态。
多态前提:要有继承关系;要有方法重写。 其实没有也是可以的,但是如果没有这个就没有意义。要有父类引用指向子类对象。父 f = new 子(); - 多态中的成员访问特点
成员变量:编译看左边,运行看左边。
构造方法:创建子类对象的时候,会访问父类的构造方法,对父类的数据进行初始化。
成员方法:编译看左边,运行看右边。
静态方法:编译看左边,运行看左边。 - 多态的好处:提高了代码的维护性(继承保证)、提高了代码的扩展性(由多态保证)
- 抽象类:抽象类和抽象方法必须用abstract关键字修饰
抽象类格式: abstract class 类名 {}
抽象方法格式: public abstract void eat();
抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
抽象类中可以有构造方法,抽象类不能进行实例化,那么要构造方法有什么作用呢?
用于子类访问父类数据时的初始化
抽象类不能直接实例化那么,抽象类如何实例化呢?
按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。
抽象类的子类
要么是抽象类
要么重写抽象类中的所有抽象方法
- 抽象类的成员方法特性:
抽象方法 强制要求子类做的事情。
非抽象方法 子类继承的事情,提高代码复用性 - 接口特点
接口用关键字interface表示 格式: interface 接口名 {}
类实现接口用implements表示 格式: class 类名 implements 接口名 {}
接口不能实例化
那么,接口如何实例化呢?
按照多态的方式来实例化。
接口的子类
可以是抽象类。但是意义不大。
可以是具体类。要重写接口中的所有抽象方法。(推荐方案)
接口成员特点
- 成员变量;只能是常量,并且是静态的。
默认修饰符:public static final
建议:自己手动给出。
构造方法:接口没有构造方法。
- 成员方法:只能是抽象方法。
默认修饰符:public abstract
建议:自己手动给出。
- 抽象类和接口的区别:
- 成员区别
抽象类:成员变量:可以变量,也可以常量
构造方法:有
成员方法:可以抽象,也可以非抽象
接口:成员变量:只可以常量
成员方法:只可以抽象 - 关系区别
类与类
继承,单继承
类与接口
实现,单实现,多实现
接口与接口
继承,单继承,多继承 - 设计理念区别
抽象类 被继承体现的是:”is a”的关系。 抽象类中定义的是该继承体系的共性功能。
接口 被实现体现的是:”like a”的关系。 接口中定义的是该继承体系的扩展功能。