多态前提
(1)前提条件:
A:要有继承关系。
B:要有方法重写。(可以没有,如果没有这个多态就没什么意义)
C:要有父类引用指向子类对象
(2)在使用多态时,成员的特点。
// A: 成员变量
// 编译看左边(其实就是程序包不报错),运行看左边(就是打印出来的结果是谁)。
// B:成员方法
// 编译看左边(其实就是程序包不报错),运行看右边(就是打印出来的结果是谁)。
假如说子父类中符合了上述三点多态前提:那么Fu f =new Zi();在用f对象掉成员的时候
如果调用的是成员变量那么打印出来的是父类的成员,如果调用的是成员方法那么打印出来的是子类的成员方法。
(4)多态的弊端:可能会遇到类型转换异常, 如果遇到了规则如下:在对一个对象进行转型的时候只可以把他转换成它原本的类型,或者是其父类的类型。
Fu f = new Zi(); //向上转型 把小类型转换成到大类型
Zi z = (Zi)f; //向下转型 把大类型转换成到小类型
(5)多态的好处:
可以提高代码的扩展性和可维护性。
知识点2:抽象类
什么是抽象类呢? 就是用关键字abstract修饰的类
什么是抽象方法? 这个方法没有方法体,并且这个方法用关键字abstract修饰
抽象类的特点:
A:抽象方法和抽象类用关键字abstract表示。
B:有抽象方法的类一定是抽象类(或者接口)。
抽象类中不一定有抽象方法。
C:抽象类不能被实例化。
那么,怎么实例化呢?
通过子类对象进行实例化。
D:如果一个类继承抽象类,那么
这个类要么本身也是抽象类。
这个类重写父类的所有抽象方法。
抽象类中的成员特点:
抽象类中 成员变量:即可以有常量也可以有变量
抽象类中 成员方法:可以有抽象方法,也可以有非抽象方法。 抽象方法它是强制要求子类做某些事的。非抽象方法是为了提高代码的复用性。
抽象类中 构造方法:是有构造方法的,它构造方法的作用是,在子类访问父类数据前对父类数据进行初始化的。
知识点3:接口
如何定义一个接口 interface接口名
类与接口的关系是实现关系 用关键字implements来表示
接口的特点:
A:接口不能被实例化。
B:接口中的方法:
要么被子类重写。
要么子类也是抽象类。
接口的成员特点:
成员变量:接口中只有常量。
因为接口的成员变量有默认修饰符:
public static final
推荐:永远自己给出修饰符。
构造方法:
没有构造方法。
任何类如果没有继承父类,那么这个类就继承自Object类。
成员方法:接口中的方法都是抽象的。
因为接口中的成员方法有默认修饰符:
public abstract
知识点4 类和接口的关系
类和接口的关系:
类与类关系:
继承关系。而且只能单继承,可以多层继承。
类与接口的关系:
实现关系。可以单实现,也可以多实现。
并且还可以在继承一个类的同时,实现多个接口。
接口与接口的关系:
继承关系。可以单继承,也可以多继承。
|
|