我试图从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();
这两者有什么区别?我熟悉第一个。有人可以用简单的术语解释当第二种方式定义对象时会发生什么?
答案 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
方法(Object
,equals
,hashCode
重载,wait
,notify
,notifyAll
和{{1 }})可用于所有对象。
完全评论的示例
toString
答案 1 :(得分:1)
sed -i 's/.*{/{/g' test.json
类继承自{
类。
在上面的示例中,第一个创建了Dog
对象,而第二个创建了一个Animal
对象。但由于Animal
类继承自Dog
类,Dog
中的Animal
函数会覆盖move()
中的Dog
函数(因为它们是他们有相同的功能原型。)
因此,当您运行move()
时,您将改为运行Animal
的{{1}}功能。