java学习

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 深入理解Class对象 RRTI的概念以及Class对象作用 认识Class对象之前,先来了解一个概念,RTTI(...
    架构师springboot阅读 1,582评论 0 3
  • 今天的主要内容是构造方法,static用法,继承,多态,抽象类,接口。由于从今天开始JAVA的学习基本上都是面向对...
    Geg_Wuz阅读 434评论 1 2
  • 本文内容介绍1、类加载器2、反射构造方法3、反射成员变量4、反射成员方法5、反射配置文件运行类中的方法 01类加载...
    乘风破浪的姐姐阅读 704评论 0 5
  • 我们的女码已经开模出货 这一批女码工期压在了男码之后 虽然第一批出货量较少 但也是把做工的效果体现了出来 如图得白...
    KamStudio阅读 360评论 0 0
  • 网络初级七期 讲师四期 分享188天 随着音乐,翩翩起舞,右手是我,左手是丈夫,在3分钟的音乐里,我们只有短暂的分...
    熙琄细语雪阅读 321评论 0 0