在java中更改引用对象

时间:2016-01-13 23:43:28

标签: java

我从tutorialspoint.com

获得了这些令我困惑的代码
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 void bark(){
      System.out.println("Dogs can bark");
   }
}

 public class TestDog{

   public static void main(String args[]){
      Animal a = new Animal(); // Animal b has reference an object of  type animal class
      Animal b = new Dog(); // Animal reference but Dog object how??

      a.move();// runs the method in Animal class
      b.move();//Runs the method in Dog class
      b.bark();
   }
 }

动物对狗对象的引用正在起作用..我不明白为什么会这样工作。需要知道它背后的基本概念。此外,如果动物参考狗对象是可能的,为什么狗不能参考动物?像:

public class TestDog{

   public static void main(String args[]){
      Animal a = new Dog(); // Animal b has reference an object of  type animal class
      Dog b = new Animal(); //now this leads to an error

      a.move();
      b.move();

   }
 }

它在编译期间显示错误

2 个答案:

答案 0 :(得分:2)

继承是其背后的主要概念。在任何地方阅读它,你都会明白这一点。

通常,最后一个代码片段中的情况是:每只狗都是动物,但不是每只动物都是狗。就像在现实生活中一样。

答案 1 :(得分:0)

你可以看到班级狗extends Animal。这意味着,Dog拥有动物拥有的所有属性和方法。您还可以拥有extends Animal类猫。所以在实践中,如果你有一堆类似的类,你就不必一遍又一遍地编写相同的代码。

您收到编译错误,因为Animal例如不知道bark()的作用,而Dog知道Animal中的所有方法/属性。如前所述,“每只狗都是动物,但不是每只动物都是狗”。