对于向上转型形如:father son1 = new son();
son1向上转型为父类,会覆盖与子类相同的父类方法,失去本身son类中与father类不同的方法变量。
代码如下:
class Shape { public int x=1; public void draw(Shape s) { System.out.println("Shape draw."); } public void showN(int n){ System.out.println("n在shap类中的大小为:"+n); } } class Circle extends Shape { public int x = 11; public int y = 22; public void draw(Circle c) { System.out.println("Circle draw."); } public void showN(int n){ System.out.println("n在Circle类中的大小为:"+n*10); } public void test(){ System.out.println("this is a method from circle!"); } } public class Upper { public static void main(String[] args){ Shape c = new Circle(); System.out.println(c.getClass());//c还是circle类对象实例 c.draw(c); // ------输出为:Shape draw. ,表示c是为circle类,必然也是shape类 c.showN(9); // ------ 输出为 90 (调用子类方法) System.out.println(c.x); //输出为 :1 调用父类变量 // c.test(); -----error,表示c实例中没有test()方法和y变量 //c.y; -----error } }向上转型的意义:
1:减少代码量:主要是执行器的代码量:传入shape类参数,可以匹配所有子类,而如果是直接子类,对于每一个子类运行,都要写一遍。
2:较为好扩展:如果有一天,产品升级了,从circle类,变成了bigcircle类,因为bigcircle还是继承与shape类,所以只需要更改
new Circle() --》》 new bigCircle类即可,别的代码不需要动。
还有什么想法或者错误,希望大家能帮忙指出
参考文章:
http://blog.csdn.net/shanghui815/article/details/6088588
http://www.cnblogs.com/wuyuegb2312/p/3858521.html