【发布时间】:2013-11-23 04:05:36
【问题描述】:
我有以下代码
package com.kathy.accessmodifiers2;
public class base extends Object{
protected int a = 10;
}
package com.kathy.accessmodifiers;
import com.kathy.accessmodifiers2.*;
class derived extends base {
public void D() {
System.out.println("D");
base b = new base();
System.out.println(super.a); //line 1
//System.out.println(b.a); //line 2
//Only this class can access the proctected member.
System.out.println(this.a);
System.out.println(a);
}
}
class derived2 extends derived {
public void D2() {
System.out.println(a);
}
}
public class Protected {
public static void main(String str[]) {
new derived2().D();
}
}
在第 1 行中,我使用 super.a,输出为 10。在第 2 行的情况下,代码无法编译,因为我试图从基类访问 super 类(不同包)的成员 protected (不同的包装)。
为什么在super 的情况下a 是可访问的?
【问题讨论】:
-
您的
Derived类没有可见性修饰符,因此使用包私有。如果你声明它public Derived extends Base你应该没问题。 -
@isnot2bad 受保护的成员可以被继承的子类访问,而不是父类的实例。
b是这里父类的实例。 -
@KishanSarsechaGajjar 你是对的!我没有注意到注释的第 2 行。我只是复制了源代码并编译了它。由于 javac 没有抱怨,我认为一切正常。我会删除我的评论!
-
@isnot2bad 没关系...你也可以参考我的回答...!!
标签: java protected super access-modifiers