关于protect的坑,我猜你迟早会踩

有人问翟天临知网查重问题,翟天临答不知什么是知网,从而一个人搅动北电北大两所的声誉的惨案。可见提一个好问题同样重要。

 

阅读一篇关于protect的文章时(原文地址https://blog.csdn.net/wangyanguiyiyang/article/details/49800493#commentBox)遇到困惑,特记录如下:

 

protected 修饰的类和属性,对于自己、本包和其子类可见 但是对于protected的成员或方法,要分子类和超类是否在同一个包中。与基类不在同一个包中的子类,只能访问自身从基类继承而来的受保护成员,而不能访问基类实例本身的受保护成员。在相同包时,protected和public是一样的 !

 

同一个包下的两个类,MyObject对象obj无法调取clone()方法,编译不通过,报

错误。

示例1:

package1
class MyObject {}


package1
public class Test  {
    public static void main(String[] args) throws CloneNotSupportedException {
        MyObject3 obj = new MyObject3();
        obj.clone();//无法通过编译
        Test test=new Test();
        test.clone();//可通过编译
    }
}

示例2: 

package1

class MyObject extends Test{

}


package1
public class Test {
  public static void main(String[] args) {
    MyObject obj = new MyObject();
    obj.clone(); // Compile ok.
  }
}

 

示例1:一种说法是虽然MyObject与Test属于同一个包,但受保护的clone方法来自java.lang.Object类型,而在Test中,其基类Object的受保护方法是不可见的。而Test做为相对于Object的子类,是可以访问继承而来的属于它自己的受保护方法的。

问题1:也就是说前者属于Object的protect方法,后者属于Test对象自己的方法?这样去理解?

 

示例2:因为MyObject的clone方法继承自Test,而Test做为相对于Object的子类,是可以访问继承而来的属于它自己的受保护方法的。

问题2:为什么在示例2中MyObject对象可以访问clone()方法而示例1中的MyObject对象却无法访问clone()方法呢?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值