面向对象四

一、多态
1. 多态:失误存在的多种形态
2. 多态前提:
a. 要有继承关系
b. 要有方法重写
c. 要有父类引用指向子类对象
3. 多态中成员访问特点:
a. 成员变量
i. 编译看左边(父类),运行看左边(父类)
b. 成员方法:
i. 编译看左边(父类),运行看右边(父类) [动态绑定],编译的时候找父类的方法,运行的时候找子类的方法。
c. 静态方法:
i. 编译看左边(父类),运行看左边(父类)。
ii. (静态和类相关,算不上重写,所以,访问还是左边)。
※只有非静态的成员方法,编译看左边,运行看右边。
4. 多态中的向上转型和向下转型
a. Person p =new SuperMan(); //向上转型
b. SuperMan() sm=new (SuperMan)p;//向下转型
5. 多态的好处和弊端
a. 好处
i. 提高代码的维护性(继承保证)
ii. 提高代码的扩展性(由多态保证)
iii. 可以当做形式参数,可以接受任意子类对象
b. 弊端:
i. 不能使用子类的特有属性和行为
二、抽象类概述及其特点
1. 抽象类概述
a. 抽象就是抽出像的部分
2. 抽象类的特点
a. 抽象类和抽象方法必须用abstract关键字修饰
i. 抽象类:abstract class 类名{}
ii. 抽象方法:public abstract void eat();
b. 抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者接口。
c. 抽象类不能实例化
i. 按照多台的方式,由具体的子类实例化。其实这也是堕胎的一种,抽象类多态。
d. 抽象类的子类
i. 要么是抽象类
ii. 要么重写抽象类中的所有抽象方法。
 
3. 抽象类中的成员特点:
a. 成员变量:既可以是变量,也可以是常量。abstract修饰符不能修饰成员变量
b. 构造方法:有
i. 用于子类访问父类数据的初始化。
c. 成员方法:既可以抽象的,也可以是非抽象的。
d. 和abstract不能共存的修饰符
i. static:通过类名调用抽象方法是没哟意义的。
ii. final:abstract强制子类重写,final 不允许子类重写,相互矛盾。
iii. private:只能在本类中访问,子类无法访问该方法,则不能重写。
三、接口的概述及其特点:
1. 接口概述
a. 从狭义的角度讲就是指java中的interface
b. 从广义的角度讲对外提供规则的都是接口
2. 接口的特点:
a. 接口用关键字interface表示
i. interface 接口名{}
b. 类实现接口用implements表示
i. class 类名 implements 接口名{}
c. 接口不能实例化
i. 可以按照多态的方式实例化。
d. 接口的子类
i. 可以是抽象类,但是意义不大
ii. 可以使具体类,要重写接口中的所有抽象方法。
3. 接口中的成员变量
a. 只能是常量,并且是静态的公共的。
i. 默认修饰符:public static final,建议手动给出该修饰符、
b. 构造方法:接口没有构造方法
c. 成员方法:只能是抽象方法
i. 默认修饰符:public abstract,建议手动给出该修饰符。
四、类与类、类与接口、接口与接口的关系
1. 类与类:
a. 继承关系,只能单继承,可以多层继承。
2. 类与接口
a. 实现关系,可以单实现,也可以多实现。
b. 并且还可以在继承一个类的同时实现多个接口。
3. 接口与接口
a. 继承关系,可以单继承,也可以多继承。
五、抽象类和接口的区别:
1. 成员区别:
a. 抽象类:
i. 成员变量:可以变量、也可以常量
ii. 构造方法:有
iii. 成员方法:可以抽象,也可以非抽象
b. 接口:
i. 成员变量:只能是常量
ii. 成员方法:只能是抽象方法。
2. 关系区别:
a. 类与类:
i. 继承,单继承
b. 类与接口:
i. 实现,单实现,多实现。
c. 接口与接口:
i. 继承,单继承,多继承。
3. 设计理念区别:
a. 抽象类:被继承体现的是 “is a”的关系,抽象类中定义的是该继承体系的共性功能
b. 接口: 被实现体现的是“like a”的关系,接口中定义的是该继承体系的扩展功能。

猜你喜欢

转载自www.cnblogs.com/snail0404/p/10453748.html