私有方法可以隐藏吗?

时间:2020-07-06 17:10:14

标签: java inheritance access-modifiers

我已经在线阅读了一些相互矛盾的资料,这些资料是否可以覆盖私有方法。 那么,本示例中到底发生了什么?方法移动被隐藏了吗?

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说,从技术上讲,这不是最重要的,所以这叫什么,会不会有任何意外的行为?

2 个答案:

答案 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,并且不会被覆盖。