美文网首页
java学习

java学习

作者: c667ec5a71d8 | 来源:发表于2018-11-27 23:37 被阅读0次

TestDog.java 文件代码:

class Animal{

  public void move(){

      System.out.println("动物可以移动");

  }

}

class Dog extends Animal{

  public void move(){

      System.out.println("狗可以跑和走");

  }

}

public class TestDog{

  public static void main(String args[]){

      Animal a = new Animal(); // Animal 对象

      Animal b = new Dog(); // Dog 对象

      a.move();// 执行 Animal 类的方法

      b.move();//执行 Dog 类的方法

  }

}

以上实例编译运行结果如下:

动物可以移动

狗可以跑和走

在上面的例子中可以看到,尽管b属于Animal类型,但是它运行的是Dog类的move方法。

这是由于在编译阶段,只是检查参数的引用类型。

然而在运行时,Java虚拟机(JVM)指定对象的类型并且运行该对象的方法。

因此在上面的例子中,之所以能编译成功,是因为Animal类中存在move方法,然而运行时,运行的是特定对象的方法。

思考以下例子:

TestDog.java 文件代码:

class Animal{

  public void move(){

      System.out.println("动物可以移动");

  }

}

class Dog extends Animal{

  public void move(){

      System.out.println("狗可以跑和走");

  }

  public void bark(){

      System.out.println("狗可以吠叫");

  }

}

public class TestDog{

  public static void main(String args[]){

      Animal a = new Animal(); // Animal 对象

      Anima

相关文章

网友评论

      本文标题:java学习

      本文链接:https://www.haomeiwen.com/subject/tejoqqtx.html