public class A {
private void getHello(){
System.out.println("Prints A");
}
}
class B extends A {
public void getHello(){
System.out.println("Prints B");
}
}
class Test{
public static void main(String[] args) {
A a = new B();
}
}
我在A类中创建私人方法 通过扩展类A来在类B中创建具有相同名称的公共方法 甚至在用A引用为B创建对象后 为什么我无法调用getHello()?
答案 0 :(得分:1)
getHello
, A
方法私有,您只能从此类中调用它。
即使在其他类中创建了类A
的实例,您也无法访问getHello()
方法。
这也是无效的代码。
class Test {
public static void main(String[] args) {
A a = new A();
a.getHello();
}
}
这是Java documentation。
答案 1 :(得分:1)
声明它是A
的一种类型,你正在失去B
的实现细节,尽管仍然存在。
A a = new B(); // a.getHello() is not accessible because it looks it up in A
B b = new B(); // a.getHello() is accessible because it calls it in B
即使getHello()
方法在A
中公开,它仍然会为B
的实例调用它。
答案 2 :(得分:1)
作为Java语言规范(https://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.6)声明:
私有类成员或构造函数只能在包含成员或构造函数声明的顶级类(第7.6节)的主体内访问。它不是由子类继承的。
当您创建对A
类对象的引用时,在您的情况下,无法从此类的外部访问此方法。