关于JAVA中protected访问修饰符的一些问题

最进在学习java这门语言,学到访问修饰符时遇到了一些问题,public和private倒是没有什么问题,但是这个protected就很有意思了,我看到书上说:

“被 protected 修饰的成员对于本包和其子类可见。”

这一句简单的解释我有点摸不着头脑,在本包内都可见我可以理解意思就是在当前包下都可以访问到它,那么其子类可见怎么解释,是在当前包下的子类还是所有包下的它的子类都可见呢?于是我又上网进行了搜索,找到了更加详细的解释如下

基类的 protected 成员是包内可见的,并且对子类可见; 

若子类与基类不在同一包中,那么在子类中,子类实例可以访问其从基类继承而来的protected方法,而不能访问基类实例的protected方法。

 这句话描述的很详细了,但对于初学者来说这句 “子类实例可以访问其从基类继承而来的protected方法,而不能访问基类实例的protected方法” 还是有一些歧义,后一句话说的好像是子类实例不能访问基类实例的protected方法,我就想,子类实例怎么访问基类实例呢?又看了一下具体的实例我才理解了这句话。

基类的 protected 成员是包内可见的,并且对包内子类可见; 

若子类与基类不在同一包中,那么在子类中,子类实例可以访问其从基类继承而来的protected方法,而我们不能通过基类实例访问基类的protected方法。

 也就是说如果子类在另一个包中继承了基类,我们可以利用子类的实例对象访问基类的protected成员,但是我们不能通过基类的实例对象访问基类的protected

下面给出代码示例:

package p;
class MyObject {
    protected int test() {
       return 1;
    }
}
 
----------------分割线,上下属于不同包---------------------

package p1;
public class SonObject extends MyObject {

    public static void main(String args[]) {

       MyObject2 obj = new MyObject();//生成父类实例对象
       obj.test(); // Compile Error         
 
       SonObject tobj = new SonObject();//生成子类实例对象
       tobj.test(); // Complie OK        
    }
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值