不同的对象和参考

时间:2016-03-10 13:32:15

标签: java oop object reference

我试图从Tutorials Point学习Java。所以,这个问题可能是如此基本。但我真的被困在这里了。而且我不知道谷歌要解决什么问题。

请看一下这个程序。

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 b = new Dog(); 

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

      b.move();//Runs the method in Dog class
   }
}

请查看对象创建。

Animal a = new Animal(); 
Animal b = new Dog(); 

这两者有什么区别?我熟悉第一个。有人可以用简单的术语解释当第二种方式定义对象时会发生什么?

2 个答案:

答案 0 :(得分:4)

  • Animal a = new Animal(); - >创建引用为Animal的{​​{1}}实例。只有Animal方法可用于从Animal调用。
  • a - >自Animal b = new Dog();扩展Dog以来,创建Animal的实例,引用为Dog。只有Animal方法(即没有仅与Animal相关的方法)可用于从Dog调用,但虚方法调用机制将解析方法调用到b&# 39;在覆盖Dog时,在运行时实现。

注意

Animal方法(ObjectequalshashCode重载,waitnotifynotifyAll和{{1 }})可用于所有对象。

完全评论的示例

toString

答案 1 :(得分:1)

sed -i 's/.*{/{/g' test.json 类继承自{类。

在上面的示例中,第一个创建了Dog对象,而第二个创建了一个Animal对象。但由于Animal类继承自Dog类,Dog中的Animal函数会覆盖move()中的Dog函数(因为它们是他们有相同的功能原型。)

因此,当您运行move()时,您将改为运行Animal的{​​{1}}功能。