Core Java、Volume I - Fundamentals(第8版)>第5章:継承> 'Protected Access'セクション(195ページ)から次のことを学びました。あなたは、のみ、または、あまり一般的に サブクラスにメソッドを制限するために、サブクラスのメソッドがスーパークラス フィールドへのアクセスを許可したい場合サブクラスのオブジェクトは、別のサブクラスの別のオブジェクトの保護されたフィールドにアクセスできますか?
は、しかし、時間があります。その場合、クラスフィーチャーは として保護されていると宣言します。たとえば、スーパークラスEmployeeがプライベートではなく保護された hireDayフィールドを宣言している場合、マネージャの メソッドはそれを直接アクセスできます。
ただし、Managerクラスのメソッドは、マネージャオブジェクトのhireDayフィールド 内で、他のEmployeeオブジェクトでは参照できません。この は、保護されたフィールドにアクセスするために、保護されたメカニズム とフォームサブクラスを乱用できないように制限されています。
私はそれをテストするために次のコードを書いています。
class Employee
{
protected String name;
public Employee(String name) {
this.name = name;
}
}
class Manager extends Employee
{
public Manager(String name) {
super(name);
}
public void peekName(Employee e) {
System.out.println("name: " + e.name);
}
}
class Executive extends Employee
{
public Executive(String name) {
super(name);
}
}
public class TestProtectedAccess
{
public static void main(String[] args) {
Employee e = new Employee("Alice Employee");
Manager m = new Manager("Bob Manager");
Executive ex = new Executive("Charles Executive");
// Manager object accessing protected name of Employee object
m.peekName(e);
// Manager object accessing protected name of Executive object
m.peekName(ex);
}
}
コードの出力は次のとおり
$ java TestProtectedAccess
name: Alice Employee
name: Charles Executive
マネージャオブジェクトm
が他の従業員のname
がe
とex
オブジェクト保護フィールドにアクセスすることができます。これは私が本から引用したもの、特に私が太字で強調した部分と矛盾しているようです。
本が間違っているか間違っていると誰かが私に説明することはできますか?私の理解が間違っている場合は、その本の意味を理解するためのより良い例を提案できますか?
はいあなたは間違いなくそれを行うことができます。 –