1. 多态:父类声明,子类创建。
2. 多态的前提:
A:要有继承关系。
B:要有方法重写。
其实没有也是可以的,但是如果没有这个就没有意义。
C:要有父类引用指向子类对象。
父 f = new 子();
3. 多态时只能调用父类的成员。
a) 多态时调用的成员变量一定为父类的成员变量。
b) 多态时调用的成员方法:
i. 如果子类没有重写此方法,调用的是父类的方法。
ii. 如果子类重写了父类的方法,调用的是子类的方法。
c) 多态时调用的构造方法:
创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。
d) 多态时调用的static方法
static方法不能产生重写。现象像重写但不是重写,如果子类“重写”static方法,依然调用父类的方法。
4. 多态的好处:
A:提高了代码的维护性(继承保证)
B:提高了代码的扩展性(由多态保证)
5. 多态的弊端:不能使用子类的特有功能。
我就想使用子类的特有功能?行不行?
行。
怎么用呢?
A:创建子类对象调用方法即可。(可以,但是很多时候不合理。而且,太占内存了)
B:把父类的引用强制转换为子类的引用。(向下转型)
对象间的转型问题:
向上转型:父类引用指向子类对象(父类声明,子类创建)
Fu f = new Zi(); //f是子类型,外界看到的是父类型
向下转型:父类引用转为子类对象
Zi z = (Zi)f; //外界看到的是父类型,强转成子类型后,外界看到是子类型。要求该f必须是能够转换为Zi的,也就是说f本身就是Zi,所以才能转。
6. 引用数据类型的类型转换
a) 引用数据类型比较大小:父类大,子类小。
b) 子类可以直接赋给父类。
c) 父类必须强转才能赋给子类。
d) 当父类的引用指向的实例,不是需要的子类类型,则运行时发生异常。
e) 当两个类没有继承关系时不能相互转换,否则编译失败。
7. java.lang.Object类:
a) 是JAVA中所有类的父类。
b) toString():当输出一个类的对象时,或将类的对象与字符串连接时。JVM会自动调用类的toString().
c) ==与equals()
i. ==:判断栈中的内容是否相等。基本数据类型比较的是值是否相等。引用数据类型比较的是引用是否相等。
ii. equals():判断当前对象与指定对象是否相等(判断堆中的内容是否相等)。equals()最早出现在Object类中,Object中的equals()仍然判断栈中的内容是否相等。如果自定义的类需要判断是否相等时,建议重写Object类中的equals()方法。