Java允许运行私有方法吗?有人能解释一下原因吗?
有人问我他是否可以运行私有基函数。我告诉他,当然这是不可能的(除了保级技巧)。 但这到底是什么:Java允许运行私有方法吗?有人能解释一下原因吗?,java,Java,有人问我他是否可以运行私有基函数。我告诉他,当然这是不可能的(除了保级技巧)。 但这到底是什么: public class MyClass { public static void main(String args[]) { A a = new B(); a.doSomething(); B b = new B(); b.doSomethingMore(); } static class A {
public class MyClass {
public static void main(String args[]) {
A a = new B();
a.doSomething();
B b = new B();
b.doSomethingMore();
}
static class A {
private void doSomething(){
System.out.println("something");
}
}
static class B extends A{
public void doSomethingMore(){
((A)this).doSomething();
}
}
}
A
和B
都是MyClass
的成员,因此他们可以访问MyClass
的所有私有功能,以及彼此的私有功能;而且MyClass
可以访问它们的所有私有功能。更多信息请访问
现在,如果它们不是嵌套类,那么自然地,MyClass
就不能访问它们的私有特性,也不能访问彼此的私有特性。例如,这不会编译:
public class MyClass {
public static void main(String args[]) {
A a = new B();
a.doSomething(); // error: doSomething() has private access in A
B b = new B();
b.doSomethingMore();
}
}
class A {
private void doSomething(){
System.out.println("something");
}
}
class B extends A{
public void doSomethingMore(){
((A)this).doSomething(); // error: doSomething() has private access in A
}
}
关于代码有什么不清楚的地方?您的方法是类
MyClass
的私有方法。它可以从MyClass
private
访问级别类中的任何代码调用是的,您的内部类A和B在同一范围内。如果从MyClass中删除B,可见性将被隐藏,并且不能调用私有方法。如果这是重复的,我不会感到惊讶,但我不会将其称为重复的(当然不是的!)。我可以理解MyClass可以访问他的孩子,但B可以访问a的doSomething完全没有意义。谢谢你的回答。@Zixav-我明白你为什么会这么想。:-)但是嵌套类的要点,它们背后的设计哲学,是它们实际上是它们所在类的一部分。所以所有的私人物品都在他们之间共享。(坦率地说,我可以看到设计决策朝着任何一个方向发展。24多年前,它就是这样发展的…:-)