Java向上转型,实验测试

对于向上转型形如: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
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值