加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 使用基类实例在派生类中访问的受保护成员

发布时间:2020-12-14 23:57:50 所属栏目:Java 来源:网络整理
导读:我在派生类中创建了基类的实例,并尝试访问受保护的成员. 我可以直接访问派生类中的受保护成员,而无需实例化基类. 基类: package com.core;public class MyCollection { protected Integer intg;} 同一包中的派生类 – package com.core;public class MyColl
我在派生类中创建了基类的实例,并尝试访问受保护的成员.

我可以直接访问派生类中的受保护成员,而无需实例化基类.

基类:

package com.core;

public class MyCollection {

      protected Integer intg;
}

同一包中的派生类 –

package com.core;

public class MyCollection3 extends MyCollection { 

 public void test(){

  MyCollection mc = new MyCollection();
  mc.intg=1; // Works
 }
}

不同包中的派生类 –

package secondary;

import com.core.MyCollection;

public class MyCollection2 extends MyCollection{ 

 public void test(){
  MyCollection mc = new MyCollection();
  mc.intg = 1; //!!! compile time error - change visibility of "intg" to protected
 }
}

当派生类也在同一个包中但是当派生类在不同的包中时,如何使用基类实例访问派生类中基类的受保护成员?

如果我将受保护的成员标记为“静态”,那么我可以使用驻留在不同包中的派生类中的基类实例来访问基类的受保护成员.

解决方法

你不能这样做是对的.您无法访问该字段的原因是您与该类不在同一个包中,也不访问同一类的继承成员.

最后一点是关键点 – 如果你写的话

MyCollection2 mc = new MyCollection2();
mc.intg = 1;

然后这会工作,因为你正在改变你自己的类的受保护成员(通过继承存在于该类中).但是,在您的情况下,您尝试在不同的包中更改其他类的受保护成员.因此,如果您被拒绝访问,那就不足为奇了.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读