java继承的重名和动静态绑定

问题背景

在java继承场景中,假如有父类Base,字类child, Child类中有和Base类中重名的静态或者非静态成员(字段,方法等)。假如Base类的引用指向了Child类的示例,则按照如下分析其引用的运行类型

1 动态绑定

需要等待运行时才能决定运行类型。动态绑定的情况只有一种

*     实例非静态方法

 

2 静态绑定

编译时期即可决定运行类型

*     实例变量
*     静态变量
*     静态方法
*     private方法

 

实验代码

Base类

public class Base {
    public static String s = "statis base";
    public  String m = "instance base";

    public void method() {
        System.out.println("method instance base");
    }

    public static void smethod() {
        System.out.println("method statice base");
    }
}

Child类

public class Child extends Base {
    public static String s = "statis child";
    public  String m = "instance child";

    public void method() {
        System.out.println("method instance child");
    }
    
    public static void smethod() {
        System.out.println("method statice child");
    }
}

测试主程序

public class T {
    public static void main(String[] args) {
        Child c = new Child();
        Base b = c;
        System.out.println(c.m);
        System.out.println(c.s);
        c.method();
        c.smethod();

        System.out.println("#######################");


        System.out.println(b.m);
        System.out.println(b.s);
        b.method();
        b.smethod();
}

}

 

实验结果

instance child
statis child
method instance child
method statice child
#######################
instance base
statis base
method instance child
method statice base

结论

由实验结果可知,只有实例非静态方法走的动态绑定,其他都是静态绑定

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值