修饰符在成员继承后的情况

本文探讨了在面向对象编程中,子类继承父类属性时的权限问题。详细解释了在同一包和不同包下,子类如何继承父类的不同访问权限级别的属性,并分析了这些属性在不同情况下的可见性和可访问性。

如果子类和基类在一个包下,那么除了它的私有成员以外,子类继承的属性其限定和父类属性的限定一致,也就是说,如果父类的属性是私有的,子类无法继承之,注意:这里的无法继承是指子类无法访问和操作父类的私有属性,如果父类的属性是包/公共/保护的,那么子类的属性也对应是包/公共/保护的。

如果子类B和基类A不在一个包下,那么公共属性保持不变,包访问限定的属性从此变成私有的,父类的私有属性无法被访问,对于保护限定,比较麻烦点,如果子类B在pack2下,而基类A在pack1下,那么子类B通过继承得到父类A的受保护的属性,如果此属性为attr,那么在pack2下的其它类无法直接访问attr,看上去就像私有的一样但其实还是protected的,attr实际上是基类A的属性,也就是说attr只在pack1下享受访问权,在pack2下由于受到保护而无法访问,这意味着如果在pack1下定义一个新的类创建的子类B的对象可以直接使用b.attr进行访问却在pack2下不行。

如果通过继承可以放宽限定的话,这就意味着我只要写一个类去继承另一个关键类,借着这种继承放宽限定的特性就可以直接操作此关键类的属性,这明显是不合理的。
综上所述,在同一包下,继承不改变属性限定,在不同的包下,public限定和protected限定不变,默认的包访问变成私有。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值