多态:
可以形象的概括为某一事物在不同时刻表现的不同状态
前提:有继承关系
有方法重写(就是多态存在的意义,如果没有方法重写就没有必要使用多态)
有父类引用指向子类对象。 父 f = new 子();
多态中的存储机制:
多态中的成员访问特点:
a:访问成员变量
编译看左边,运行看左边。
b:访问构造方法
创建子类对象的时候,会访问父类的构造方法,对父类的数据进行初始化。
c:访问成员方法
编译看左边,运行看右边。
d:访问静态方法
编译看左边,运行看左边。
优点:提高了代码维护性和扩展性。
弊端:不能完成子类所特有的功能。
为了解决这个缺点,我们可以使用把父类的引用强制转换为子类的引用(向下转型)
抽象类:
概念:在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。
特点:
a:抽象类和抽象方法必须用abstract关键字修饰
抽象类格式: abstract class 类名 {}
抽象方法格式: public abstract void eat();
b:抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
c:抽象类中可以有构造方法,抽象类不能进行实例化,所以他的构造方法 用于子类访问父类数据时的初始化
d:抽象类不能直接实例化而是按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。
e:抽象类的子类
要么是抽象类
要么重写抽象类中的所有抽象方法
成员特点:
a.成员变量既可以是常量也可以是变量。
b.有构造方法,用于子类访问父类数据的初始化。
c.成员方法既可以是抽象的,也可以是非抽象的
成员方法特性:
抽象方法:子类中必须写的方法。
非抽象方法:子类需要继承使用的方法 。
接口:
概念:定义功能但是不给出具体实现的声明。
特点:
a:接口用关键字interface表示
格式: interface 接口名 {}
b:类实现接口用implements表示
格式: class 类名 implements 接口名 {}
c:接口不能实例化需要按照多态的方式来实例化。
d:接口的子类可以是抽象类(但是意义不大。)可以是具体类。要重写接口中的所有抽象方法。
接口的成员特点:
成员变量:只能是静态常量,默认的修饰符为public static final
构造方法:接口没有构造方法。
成员方法:在JDK1.7之前只能是抽象方法,后来增加了静态方法和默认方法。默认修饰符为public abstract
类与类,类与接口,接口与接口的关系:
类与类:继承关系,只能单继承,但是可以多层继承。
类与接口:实现关系,可以单实现,也可以多实现。类实现了接口。
接口与接口:继承关系,可以单继承,也可以多继承。
抽象类和接口的区别:
A:成员区别
抽象类:
成员变量:可以变量,也可以常量
构造方法:有
成员方法:可以抽象,也可以非抽象
接口:
成员变量:只可以常量
成员方法:只可以抽象
B:关系区别
类与类
继承,单继承
类与接口
实现,单实现,多实现
接口与接口
继承,单继承,多继承
C:设计理念区别
抽象类 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。
接口 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。