一、多态的概念和前提
1、概念-什么是多态
对象在不同时刻表现出的不同的状态。
2、前提
A:要有继承关系或实现关系
B:要有方法重写或实现
C:要有父类引用指向子类对象,或父类接口指向子类对象
3、举例:
狗是动物
二、多态的成员特点
1、成员变量
编译看左边,运行看左边
Fu f=new Zi();
f.name;//调用的是父类的name
2、非静态成员方法
Fu f=new Zi();
f.show();//调用的是子类的show
3、产生以上的原因
方法有重写,变量没有重写
三、多态的弊端和好处
弊端:父类引用不能直接使用子类对象的特有功能。
解决方案:
向下转型(强转)
好处:增强了程序的扩展性和可维护行
四、转型过程中出现的问题
java.lang.ClassCastException
: 类型转换异常
该异常产生的原因:类型不匹配
一个父类的引用指向的是狗,要把这个父类的引用强制转换成猫,所以不行
Animal animal = new Dog();
Cat cat = (Cat)animal;//因为animal存储的是狗,强转成猫就会报错
五、抽象类和抽象方法
1、抽象方法
只有方法声明,没有方法体的方法成为抽象方法,该方法用abstract修饰
2、抽象类
如果一个类中含有抽象方法,这个类就可以成为抽象类,该类被abstract修饰
3、什么时候定义抽象类
如果一个方法我们不确定他要做什么,就把这个方法定义成抽象的,那么这个类就被定义成抽象类
4、抽象类的基本特定
1、抽象类抽象方法用abstract修饰
2、有抽象方法的类一定是抽象类,抽象类中不一定有抽象方法
3、抽象类不能被实例化
4、如果一个类继承抽象类,要么本身是抽象类,要么必须实现抽象方法
5、抽象类的作用
强制子类必须完成某种功能
6、抽象类的成员特点
1、成员变量:可以常量,可以变量
2、构造方法
有构造方法,但是不能创建对象,只是用于子类访问父类数据时,对父类的 成员进行初始化。
3、成员方法
可以有抽象方法,也可以有非抽象方法
六、接口
1、概念
我们可以把接口看成一种特殊的抽象类,比抽象更抽象。因为它里面的方法都是抽象的,但注意接口不是类,我们只是把它看成类
2、接口的基本特点
1、接口不能被实例化。
2、接口中的方法:
要么被子类重写。
要么子类也是抽象类。
3、接口的成员特点
因为接口的成员变量有默认修饰符:public static final推荐:永远自己给出修饰符。
2、构造方法
没有构造方法//因为接口中的成员变量都被final修饰,定义的时候必须做初始化任何类如果没有继承父类,那么这个类就继承自Object类。//所有类都直接或者间接的继承自Object类。Object类是所有类的超类
3、成员方法:接口中的方法都是抽象的
因为接口中的成员方法有默认修饰符:public abstract
推荐:永远自己给出修饰符。
4、接口的注意事项
接口中不能有静态代码块,代码块,构造方法
4、接口与类,抽象类的关系
1、抽象类和接口的关系(掌握)
抽象类:
成员变量:可以是变量,也可以是常量。
构造方法:有构造方法。
成员方法:可以是抽象方法,也可以是非抽象方法。
接口:
成员变量:只能是常量。
默认修饰符:public
static final
成员方法:只能是抽象方法。
默认修饰符:public
abstract
2、类与接口的关系(掌握)
类与类:
继承关系,只能单继承,可以多层继承。
类与接口:
实现关系,可以单实现,也可以多实现。
还可以在继承一个类的同时,实现多个接口。
接口与接口:
继承关系,可以单继承,也可以多继承。
3、设计理念的区别
抽象类被继承,这个类中定义的是整个继承体现的共性内容。
体现:is a
接口被实现,这个接口中定义的是整个体现的扩展内容。
体现:like a
版权声明:本文为博主原创文章,未经博主允许不得转载。