java的protected访问修饰符理解

对于protected修饰的成员来说,即使子类位于不同的包中,该子类也能访问它(通过继承)。

其实在某个类中定义的protected 方法和属性和默认权限方法和属性是一样的。

比如,某类的protected 方法和属性在包外是不能通过该类对象进行访问的(你能在包外访问一个类的默认权限的方法和属性吗?当然不能),这就是为什么在某对象所在的包的以外的任何地方,你不可以通过该类的对象引用来调用它的protected 方法和属性,哪怕是在该类的子类中也不可以这样做。在该类包外的子类中能“看到“的只是子类自己继承来的protected 方法和属性,它是不能“看到“它的父类对象的protected方法和属性的。

所以在使用protected时,需要注意几点:

1.包外子类有权访问超类成员,它指子类继承该成员,然而,这并不意味着包外子类能够使用超类实例的引用访问该成员。如下例所示:

父类:Parent,位于certification包


子类Child,位于Other包


但是如果子类和父类位于同一个包下,则可以使用超类实例的引用访问该成员。如下:


2.超类中的protected修饰的成员,被子类继承后,该成员对这一子类外的任何代码来说都变成私有的。例如:

有个Neighbor类和Child类位于同一个包other中,Neighbor类也不能访问Child 的继承(受保护的)变量x。




总之:当一个包外子类继承保护成员时,该成员在这个子类内实际上变为私有,因此,只有这个子类及其子类能够访问它。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值