101. Java 继承 - 父类中的私有成员

77 阅读2分钟

101. Java 继承 - 父类中的私有成员

在 Java 中,子类无法继承父类的私有成员(包括字段和方法)。这意味着父类中的 private 成员对于子类是不可见的,也无法直接访问。然而,如果父类提供了公共(public)或受保护(protected)的访问方法来操作这些私有成员,那么子类可以通过这些方法间接地访问和修改父类的私有字段。

示例 1:父类中的私有成员和公共访问方法
class SuperClass {
    private String secret = "This is a secret"; // 父类中的私有字段

    public String getSecret() { // 公共方法,允许访问私有字段
        return secret;
    }
}

class SubClass extends SuperClass {
    public void showSecret() {
        // 子类通过父类的公共方法访问私有成员
        System.out.println("The secret is: " + getSecret());
    }
}

public class Main {
    public static void main(String[] args) {
        SubClass subClass = new SubClass();
        subClass.showSecret(); // 输出:The secret is: This is a secret
    }
}

在上面的例子中,SuperClass 中的私有字段 secret 不能被 SubClass 直接访问,但是 SubClass 可以通过 getSecret() 方法间接地获取该字段的值。

嵌套类访问外部类的私有成员

Java 中的嵌套类(包括静态和非静态嵌套类)可以访问其外部类的所有私有成员,无论这些成员是字段还是方法。这是因为嵌套类与外部类之间有着非常紧密的关系。

示例 2:嵌套类访问外部类的私有成员
class OuterClass {
    private String secret = "Outer class secret"; // 外部类的私有成员

    class InnerClass {
        public void printSecret() {
            // 内部类可以访问外部类的私有成员
            System.out.println("The secret from outer class is: " + secret);
        }
    }
}

public class Main {
    public static void main(String[] args) {
        OuterClass outer = new OuterClass();
        OuterClass.InnerClass inner = outer.new InnerClass();
        inner.printSecret(); // 输出:The secret from outer class is: Outer class secret
    }
}

在这个例子中,InnerClassOuterClass 的嵌套类,它可以访问 OuterClass 中的私有字段 secret。即使 secret 是私有的,嵌套类 InnerClass 依然可以访问它。

总结:
  • 子类不能直接访问超类的私有成员(字段和方法),但是可以通过 publicprotected 方法访问这些成员。
  • 嵌套类(无论是静态的还是非静态的)可以访问其外部类的所有私有成员。这是因为嵌套类和外部类具有特殊的关系。

通过这些示例,我们可以更好地理解父类的私有成员在继承中的访问限制以及嵌套类如何访问外部类的私有成员。