关于覆盖Java的澄清

3 java overriding terminology

以此为例:

class Animal{

   public 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[]){
      Animal a = new Animal(); // Animal reference and object
      Animal b = new Dog(); // Animal reference but Dog object

      a.move();// runs the method in Animal class

      b.move();//Runs the method in Dog class
   }
}
Run Code Online (Sandbox Code Playgroud)

在调用b.move()时,是否正确地说,在Dog类下面的方法"move()"已经覆盖了Animal类下的"move()",因为Dog对象在被引用时调用相同的方法时优先.动物类型?

我注意到很多网站都没有解释这个问题,而是他们只是抛出一些例子,而不是逐行讨论.只是想澄清我的术语混乱.

旁注,是否可以拥有Dog对象但是调用Animal类下的move()?例如,有类似的东西:

Dog doggy = new Dog();
doggy.move()
>>>
Animals can move
>>>
Run Code Online (Sandbox Code Playgroud)

这可能吗?会((动物)小狗).move()完成这个?

Yas*_*ant 5

当然,在调用b.move()" move()Dog课堂下" 的方法已经覆盖了" move()Animal课堂下" 时,这是正确的.

对于第二个问题,您应该将类​​Dog实现为:

public class Dog extends Animal {

   public void move(){
     super.move();
   }
}
Run Code Online (Sandbox Code Playgroud)

对于第三个问题,答案是"不".

          ((Animal) doggy).move()
Run Code Online (Sandbox Code Playgroud)

这只是"冗余",并将输出" move()放在Dog类下".