通过实验看 Java 中私有成员是否能被继承

关于 Java 中,子类能不能继承父类中的私有成员的问题,似乎颇有争议。在 SUN 授权 Java Language Specification 一书中,作者认为子类可以继承父类的私有成员,只是不能访问罢了。

我们知道,子类可以通过声明具有相同名字的属性来覆盖掉从父类中继承而来的相应属性,也可以声明具有相同名字相同签名的方法来覆盖掉从父类中继承而来的相应方法。也就是说,如果子类可以从父类中继承私有成员,那么也就可以覆盖掉继承而来的私有成员。反之,如果子类覆盖不了父类中的私有成员,我们就不能说子类继承了父类中的私有成员。

我们可以设计一个实验来验证父类中的私有成员是否会被子类继承。考虑如下两个类:

public class ParentClass {
    private String msg = "I am a attribute in ParentClass.";

    public String getMsg() {
        return msg;
    }
}

public class ChildrenClass extends ParentClass {
    private String msg = "I am a attribute in ChildrenClass.";
}

测试类:

public class TestClass {
    public static void main(String[] args) {
        ParentClass p = new ParentClass();
        ChildrenClass c = new ChildrenClass();

        System.out.println("ParentClass object outputs:");
        System.out.println(p.getMsg());
        System.out.println("");
        System.out.println("ChildrenClass object outputs:");
        System.out.println(c.getMsg());
    }
}

编译后运行测试类我们可以看到控制台输出以下结果:

ParentClass object outputs:
I am a attribute in ParentClass.

ChildrenClass object outputs:
I am a attribute in ParentClass.

可以看到,虽然我们在子类中定义了一个属性试图覆盖掉父类中的同名属性,但是从输出结果看来,这个行动是无效的。因为没有从父类中继承私有成员,所以也谈不上覆盖父类中的同名属性——没有可供覆盖的属性。相同的道理,子类也不会继承父类中的私有方法,有兴趣的程序员可以自己写一个类似的实验程序试一试。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值