私はこのJava SCJPの本を読んでいて、これに出くわしました:
保護されたアクセス制御レベルとデフォルトのアクセス制御レベルはほとんど同じですが、1 つの重大な違いがあります。既定のメンバーは、メンバーにアクセスするクラスが同じパッケージに属している場合にのみアクセスできますが、保護されたメンバーは、サブクラスが別のパッケージにある場合でも、サブクラスから (継承を通じて) アクセスできます。
そこで、protected
ポイントをテストすることにしました。
パッケージにスーパークラスがあります
package scjp;
public class Token {
protected int age = 6; //This is the protected class-level variable.
public Token(String name){
this.name = name;
}
public Token(String name, int age){
this.name = name;
this.age = age;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
}
I have a sub-class in another package;
package pack;
import scjp.Token;
public class son extends Token{
public static void main(String[] args) {
System.out.println(Token.age);
}
}
ご覧のとおりage
、スーパークラスの保護されたクラスレベルの整数変数にアクセスしようとしています。
しかし、私はこのエラーが発生します:
age has protected access in scjp.Token
at pack.son.main(son.java:11)
Java Result: 1
それで、何がうまくいかないのですか?