多态的成员调用:
Fu f = new Zi()
1.成员变量的调用:编译看左边,运行也看左边
f.name:若父类中有name变量,则编译正常,继续运行,调用父类中的name变量而非子类中的name变量;若父类中没有name变量,则直接编译失败,程序报错
2.成员方法的调用,编译看左边,运行看右边
f.work():若父类中有work方法,则编译正常,继续运行,调用子类中重写的work方法;若父类中无work方法,则编译失败,程序报错
另:若定义
Zi z = new Zi()
若调用z.name,若该类中没有name变量,则会回到父类中寻找调用父类的name
多态的优势:若用父类作为方法的参数,则可以接收所有子类对象
多态的弊端:不能调用子类的特有功能
引用数据类型转换方式有:
1.自动类型转换:Fu f = new Zi()
2.强制类型转换:Zi z = (Zi)f
强制类型转换解决问题:可以把父类对象转换成子类对象进而调用子类的特有功能
若转换类型与真实对象类型不一致则会报错
如:Zi_1 c = (Zi_1)f,由于f是Zi类对象,不是Zi_1类对象,因此程序报错
转换时可用instanceof关键字判断是否为某一类对象
如:a instanceof Dog b:先判断a是不是Dog类型的对象,若是的话,则把a强制转换成Dog类型,转换以后变量名为b
若不是,则返回false
例:f instanceof Zi b:f是Zi类对象,则把f强制转换成Zi类型,转换以后变量名为b,此时b为Zi类对象
1127

被折叠的 条评论
为什么被折叠?



