多态是指事物存在的多种形态 多态前提:要有继承关系(可以继承普通类可以继承抽象类)或者实现关系(实现接口), 要有方法重写, 要有父类引用指向子类对象
1成员变量的访问 编译看 “=”左边,输出也是看”=”左边,左边的类是谁,输出的就是谁中的变量 ,如果左边的类中没有相应的变量就会报错.(看左边是为了,看父类中是否有对应的成员,有的话才能保证编译通过,没有就报错) 2 成员方法的访问>>动态绑定 编译看’=’左边,运行看’=’右边,如果右边的类中没有成员方法,编译的时候就会报错 总结:多态中,除了父类引用子类的重写方法外,其他的都是看父类自己的成员,若父类中没有对应的成员就会报错.
3 多态中,静态方法访问的特点
编译看左边,运行也看左边 ,静态和类相关,算不上重写,所以,访问还是左边的 总结,只有非静态的成员方法,编译看左边,运行看右边,其他全看左边,运行也是左边 (只有父类引用子类中的重写方法时编译看左边父类,运行看右边子类; 其他一律是编译和运行都看左边的父类,如果父类中没有相应的成员,就会报错, 如果子类中没有相应的成员,就会继承输出父类中的成员)
4 向上转型和向下转型
父类引用子类对象就是向上转型,把子类提升为父类 Personp=new SuperMan(); //向上转型 向下转型就是把通过向上转型变为父类的再转回原来的子类 SuperMan s =(SuperMan)p;//向下转型 父类的引用不能直接使用子类对象特有的内容,除非向下转型之后才可以 5 多态的好处与弊端 好处,提高了代码的维护性和扩展性 弊端:父类无法直引用子类的内容
Instanceof ,判断前面的数据是不是后面的数据类型
|