gpt4 book ai didi

java - 内部类可以访问基类中的私有(private) final方法,但为什么呢?

转载 作者:行者123 更新时间:2023-12-01 22:51:28 26 4
gpt4 key购买 nike

为什么java的创建者允许这种情况发生?我确信这其中一定有某种原因。我的下面的代码允许狮子顽皮地跑得和猎豹一样快。

public class animal {
class carnivores {
private final void runAsFastAsCheetah() {
System.out.println("Ran as fast as Cheetah");
}
}
public class Lion extends carnivores {
public void runAsFastAsLion() {
System.out.println("Ran as fast as Lion.");
super.runAsFastAsCheetah();
}
}
public static void main(String[] args) {
animal animal = new animal();
Lion lion = animal.new Lion();
//lion.runAsFastAsCheetah(); //Not allowed but//
lion.runAsFastAsLion();
}
}

编辑:对于那些认真对待狮子和猎豹的人,我修改了代码。

public class foo {
class A {
private final void myMethod() {
System.out.println("in private final myMethod()");
}
}
public class B extends A {
public void myMethod() {
System.out.println("in B's myMethod()");
super.myMethod();
}
}
public static void main(String[] args) {
foo foo = new foo();
B b = foo.new B();
b.myMethod();
}
}

最佳答案

具有相同外部类的所有类都可以访问同一外部类的任何其他类的 private 成员。添加嵌套类时添加了此功能。恕我直言,这是因为这些成员被编译在一起,这使得嵌套类更有用。

注意:JVM 不支持此功能,因此编译器添加了出现在堆栈跟踪中的访问器方法,例如 access$100。这些是由编译器添加的,以允许访问类之间的私有(private)成员。

<小时/>

访问修饰符仅检查一级。如果 A 可以访问 B 和 B 并访问 C,那么 A 可以访问 B 允许它访问的任何内容,其中可能是 C。

这样做的原因是为了避免使 private 变得毫无意义。如果私有(private)成员只能由可以访问它的类访问,则意味着它只能由同一类中的 main 调用。这将使它在任何其他类中毫无用处。

关于java - 内部类可以访问基类中的私有(private) final方法,但为什么呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24677747/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com