相关疑难解决方法(0)

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

我在派生类中创建了基类的实例,并尝试访问受保护的成员.

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

基类:

package com.core;

public class MyCollection {

      protected Integer intg;
}
Run Code Online (Sandbox Code Playgroud)

同一包中的派生类 -

package com.core;

public class MyCollection3 extends MyCollection { 

 public void test(){

  MyCollection mc = new MyCollection();
  mc.intg=1; // Works
 }
}
Run Code Online (Sandbox Code Playgroud)

不同包中的派生类 -

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
 }
}
Run Code Online (Sandbox Code Playgroud)

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

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

java protected access-control

6
推荐指数
1
解决办法
2万
查看次数

限定名称和字段访问表达式之间有什么区别?

受保护访问JLS详细信息:

设C是声明受保护成员的类.仅允许在C的子类S的主体内访问.

此外,如果Id表示实例字段或实例方法,则:

如果访问是通过限定名称Q.Id,其中Q是ExpressionName,则当且仅当表达式Q的类型是S或S的子类时才允许访问.

如果访问是通过字段访问表达式E.Id,其中E是主表达式,或通过方法调用表达式E.Id(...),其中E是主表达式,则允许访问当且仅当如果E的类型是S或S的子类.

限定名称字段访问表达式之间什么区别?

java jls

6
推荐指数
1
解决办法
937
查看次数

标签 统计

java ×2

access-control ×1

jls ×1

protected ×1