在多态中成员的区别 Fu f = new Zi();
1 成员属性:
编译的时候:看等号的左边,等号左边的类型中有没有相应的成员属性,有相应的属性编译通过
运行的时候:看等号的左边, 等号左边的类型中有没有相应的成员属性,有相应的属性使用相应的属性
总结:编译,运行都看左边
2 成员方法
编译的时候:看等号的左边,等号左边的类型中有没有相应的成员方法,有相应的属性编译通过
运行的时候:看等号的右边,等号右边的类型中有没有相应的成员方法,调用右边的方法(前提:有方法的重写)
没有调用父类中的方法。
总结:编译看左边,执行看右边
3 static 方法
总结:编译,运行都看等号左边
这是曾经讲师举得例子,不错
举例:孔子装爹。
孔子爹:教书() -- JavaSE, age:40
孔子:教书() -- 论语, 玩游戏(), age:20
//多态体现
孔子爹 k爹 = new 孔子(); //孔子就穿上爹的衣服,带上爹的眼镜,沾上胡子。 向上转型
k爹.教书(); -- 论语
sop(k爹.age); -- 40
//k爹.玩游戏(); -- 不能调用。多态的弊端:不能使用子类的特殊方法。
//回家了
//孔子 k = new 孔子();
//k.玩游戏();
孔子 k = (孔子)k爹; //脱下爹的衣服,去除眼镜,去掉胡子 向下转型
k.教书(); -- 论语
sop(k.age); -- 20
//为什么要使用向下转型:就是为了使用子类的特殊功能
k.玩游戏(); |