我已经在线阅读了一些相互矛盾的资料,这些资料是否可以覆盖私有方法。 那么,本示例中到底发生了什么?方法移动被隐藏了吗?
class Animal {
private void move() {
System.out.println("Animals can move");
}
}
class Dog extends Animal {
public void move() {
System.out.println("Dogs can walk and run");
}
}
public class TestDog {
public static void main(String args[]) {
Dog b = new Dog(); // Dog reference and Dog object
b.move(); // runs the method in Dog class
}
}
https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html说,从技术上讲,这不是最重要的,所以这叫什么,会不会有任何意外的行为?
答案 0 :(得分:0)
您所做的不是覆盖。如果要确认这一点,只需将@Override
之前的public void move()
放在类Dog
中,您会看到编译错误。
注意:private
方法始终隐藏在类内部。无法在课堂之外访问它。
答案 1 :(得分:0)
您必须这样编写测试。.
public class TestDog {
public static void main(String args[]) {
Animal b = new Dog(); // Animal reference but Dog object
b.move(); // runs the method in Dog class
}
}
然后,您得到:
/TestDog.java:16: error: move() has private access in Animal
b.move(); // runs the method in Dog class
^
1 error
您的测试用例只是在move()
中调用Dog
,并且不会被覆盖。