1. 多态
1.1 定义
某一类事物的多种存在形态
1.2 举例
比如动物中猫,狗
猫这个对象对应的类型是猫类型
猫 c = new 猫();
同时也是动物中的一种,也可以把猫称为动物
动物 y = new 猫();
动物是猫和狗具体事物中抽取出来的父类型
父类型引用指向了子类对象
1.3 多态在程序中的体现
父类或者接口的引用指向了自己的子类对象
1.4 多态的前提
1、必须有继承或者实现关系
2、通常都有覆盖的操作
1.5 多态的好处
提高了程序的扩展性和后期的维护性,当有多个同一继承体系的对象
进行操作时,可以使用多态的特性来简化代码
1.6 多态的弊端
多态的出现,虽然可以让前期的程序使用后期的内容,
但是不可以使用子类的特有内容。
1.7 多态的转型
1.7.1 向上转型(类型提升)
向上转型是子类对象提升为父类类型。
提升的好处:就是提高了扩展性,隐藏了子类型
提升的局限性:只能使用父类中的方法,如果子类有覆盖的话,运行的是子类的内容。
Animal a = new Cat(); // Cat类型向上转型为Animal
1.7.2 向下转型(强制类型转换)
向下转型是将存储着子类对象的父类类型引用强制转换为子类类型
好处:可以使用具体子类类型的特有内容
Cat c = (Cat) a;
c.catchMouse();
1.7.3 注意事项
a.对于子父类转型动作,自始自终都是子类对象在做着类型的转换而已。
不能将父类的对象强制转换成子类类型。
Cat c = (Cat) new Animal(); // 这是错误的
b.父类型向下转成子类型时,因为子类型不唯一,所以需要进行判断
Animal a = new Cat();
// 使用instanceof,对象 instanceof 类或接口
// 记住:一旦需要向下转型,必须先判断
if (a instanceof Dog)
{
Dog d = (Dog) a; // ClassCastException
c.lookHome();
}
1.8 多态成员的特点
a.成员函数
多态调用时,对于成员函数,编译时期参考引用类型变量所属的类中是否有
被调用的方法,有就编译通过,否则就失败。运行时期,参考对象所属的类中
是否有被调用的方法。简单说,编译看左边,运行看右边
b.成员变量
多态调用时,对于成员变量,无论是编译时期还是运行时期,都参考引用变量所属
的类中的成员变量,参考等号的左边
c.静态函数
编译和运行都看左边
2. Object类
Object是所有类的超类,所有对象都具备的方法定义在该类中
1,equals(Object obj) 对象比较,比较的是地址值
2,getClass() 返回当前对象对应的Class对象,每一个.class文件都会对应一个Class对象
3,hashCode() 返回哈希值
4,toString()
通常一个类都会覆盖equals,hashCode,toString,创建该类自己的功能
|
|