Java 多态性 编译看左边 运行看右边

文章详细解释了Java中子类(Subclass)继承父类(Base)的情况,以及实例变量(instancevariables)和静态方法(staticmethod)在编译和运行时的行为差异。实例b引用s时,它们共享同一地址,但静态方法调用取决于实际对象(newSub())。
摘要由CSDN通过智能技术生成
class Base {
    int count = 10;
    public void display() {
        System.out.println(this.count);
    }
}

class Sub extends Base {
    int count = 20;
    public void display() {
        System.out.println(this.count);
    }
}

public class FieldMethodTest {
    public static void main(String[] args){
        Sub s = new Sub();
        System.out.println(s.count);// 20
        s.display();// 20
        Base b = s;
        System.out.println(b == s); // true 此时b和s指向同一个new sub()地址值
        System.out.println(b.count);// 10 属性,编译运行都看左边
        b.display();// 运行看右边 b = new Sub().display() 20

        Base b1 = new Base();
        System.out.println(b1.count); // 10
        b1.display();// 10
    }
}

总结:

  1. 实例b == s,此时b和s指向同一个new Sub()地址值
  2. 属性和static方法,编译和运行都只看左边
            即:b.count(),运行时看左边<==>b = new Base().count = 20;
  3. 方法:编译看左边,运行看右边.
            即:b.display(),运行时看右边<==>b = new Sub().display() = 10;
  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值