1.多态
多态:同一个实体具有多种形式,可以理解为事物存在的多种体现形态。
人:男人、女人。
动物:猫、狗。
猫 x = new 猫();
动物 x = new 猫();
重载和覆盖是函数的多态。重载是编译时的多态,覆盖是运行时的多态。
个人理解:如果编译时和类型和运行时类型不同,就出现多态。
(1).多态的基本体现
父类的引用指向了自己的子类对象。
父类的引用也可以接收自己的子类对象。
(2).多态的前提
必须是类之间有关系,有么继承,要么实现。
通常还有一个前提:存在覆盖。
(3).多态的好处
多态的出现大大的提高程序的扩展性。屏蔽不同子类对象间的差异,写出通用代码,进行通用编程,以适应需求的不断变化。
只修改方法的实现,不必修改方法的声明。
(4).多态的弊端
提高了扩展性,但是只能使用父类的引用访问父类的成员。
2.多态转型
Animal a = new Cat(); //类型提升。向上转型。
a.eat();
如果想要调用猫的特有方法时,如何操作?
强制将父类的引用,转成子类类型。
Cat c = (Cat)a; //向下转型
c.catchMouse();
千万不要出现这样的操作:就是将父类对象转成子类类型。
能转换的是父类引用指向来了自己子类对象时,该引用可以被提升,也可以被强制转换。
多态自始自终都是子类对象在做着变化。
对象名 instanceof 类 :判断指定的变量名此时的引用的真正类型是不是当前给出的类或者子类。
3.多态中成员的特点
(1)多态中成员函数的特点
在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过;如果没有,编译失败。
在运行时期:参阅对象所属的类中是否有调用的方法。
简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。
(2)多态中成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)。
(3)在多态中,静态成员函数的特点:
无论编译和运行,都参考左边。
4.Object类
Object:是所有对象的直接或者间接父类,类层次结构的根类,传说中的上帝。所有对象的超类。
该类中定义的肯定是所有对象都具备的功能。
java认为所有对象都具备比较性。equals(Object obj)指示其他某个对象是否与此对象“相等”。
Object类中已经提供了对对象是否相同的比较方法。
如果自定义类中也有比较相同的功能,没必须重新定义。
只要沿袭父类中的功能,建立自己特有比较内容即可。这就是覆盖。
java认为所有对象都能变成字符串。 toString() 返回对象的字符串表示。
返回的字符串:getClass().getName +'@' +Integer.toHexString(hashCode())
所有对象都有哈希码值。hashCode() 返回对象的哈希码值。
getClass() 返回此Object的运行时类。
Class类中的getMethods() 反编译。
一般都把Object类的方法复写。
|
|