首页 > 编程语言 >java中的多态

java中的多态

时间:2022-12-14 15:55:05浏览次数:32  
标签:java name 子类 多态 Cat animal 父类 public

本文主要讲述java中的多态性质

代码结构如图:

  Animal类:

public class Animal {
    private String name;

    public Animal(String name) {
        this.name = name;
    }

    public void eat(){
        System.out.println("animal在吃...");
    }
    private void sleep(){
        System.out.println("animal在睡觉...");
    }
}

  Cat类:

public class Cat extends Animal{
    // 调用父类的带参构造器
    public Cat(String name) {
        super(name);
    }

    public void eat(){
        System.out.println("猫吃鱼...");
    }
    public void CatchMouse(){
        System.out.println("猫抓老鼠...");
    }
}

  PloyDetail类:

public class PloyDetail {
    public static void main(String[] args) {
        Animal animal = new Cat("大黄");
        // animal.CatchMouse();
        animal.eat();
        animal.sleep();
     
    }
}

运行结果:

说明,编译阶段a是A的对象,但是在运行时,仍然按照子类的具体实现,即new ...,调用方法,先在具体实现的类中查找,如果没有再去父类中继续查找,例如eat()方法,子类Cat有该方法,直接调用,而sleep()方法,子类Cat中没有该方法,查看父类,父类中有sleep()方法,调用该方法。

 

使用多态注意细节:

① 多态的使用前提是继承,具体细节如下:

  向上转型:父类的引用指向了子类的对象,语法:父类类型引用名 = new 子类类型();

② 可以调用父类的所有成员(遵循访问权限),但是不能调用子类的特有成员,原因如下:

  A a = new B(),A是B的父类,在编译阶段,a是A类的对象,能调用哪些成员,是由编译类型决定的。

③ 最终运行效果看子类的具体实现,调用方法时,按照从子类开始查找方法,如果子类没有,就从其父类查找,一层一层查找下去。最后,如果还是没有该方法,就报错。

 

标签:java,name,子类,多态,Cat,animal,父类,public
From: https://www.cnblogs.com/zwgitOne123/p/16982397.html

相关文章

  • Java线程篇(十一):Fork/Join-Java并行计算框架
    并行是指系统内有多个任务同时执行,而并发是指系统内有多个任务同时存在,不同的任务按时间分片的方式切换执行,由于切换的时间很短,给人的感觉好像是在同时执行。 Java在JDK7......
  • JavaScript学习--Item29 DOM基础详解
    看完JavaScript高级程序设计,整理了一下里面的DOM这一块的知识点,比较多,比较碎!DOM在整个页面的地位如图:DOM(文档对象模型)是针对HTML和XML文档的一个API(应用程序编程接口)。DOM......
  • Java线程篇(九):Condition-线程通信更高效的方式
      接近一周没更新《Java线程》专栏了,主要是这周工作上比较忙,生活上也比较忙,呵呵,进入正题,上一篇讲述了并发包下的Lock,Lock可以更好的解决线程同步问题,使之更面向对象,并......
  • Java线程篇(五):Timer和TimerTask
      Timer和TimerTask可以做为实现线程的第三种方式,前两中方式分别是继承自Thread类和实现Runnable接口。    Timer是一种线程设施,用于安排以后在后台线程中执行......
  • JavaScript的数据类型详解
    数据类型JavaScript中有5种简单数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number和String。还有1种复杂数据类型——Object,Object本质上是由一组无序的名值对......
  • Java8:Lambdas(一) 学习lambda表达式
    了解Java8中的lambda表达式对开发人员来说没有什么比自己选择的语言或平台发布新版本更令人激动了。Java开发者也不例外。实际上,我们更期待新版本的发布,有一部分原因是因......
  • Java8:Lambdas(二)学习怎样去使用lambda表达式
    JavaSE8的发布很快就到了。伴随着它来的不仅仅是新的语言lambda表达式(同样被称为闭包或匿名方法)——伴随着一些语言特性支持——更重要的是API和library的增强将会使传统......
  • 关于JavaScript的九个思维导图
    学习的道路就是要不断的总结归纳,好记性不如烂笔头,so,下面将po出10张javascript相关的思维导图。思维导图小tips:思维导图又叫心智图,是表达发射性思维的有效的图形思维工具......
  • Java线程篇(六):线程池
    自JDK5之后,Java推出了一个并发包,​​java.util.concurrent​​,在Java开发中,我们接触到了好多池的技术,String类的对象池、Integer的共享池、连接数据库的连接池、Struts1.3的......
  • eclipse运行java.lang.OutOfMemoryError: PermGen space解决方法
    一、在window下eclipse里面Server挂的是tomcat6,一开始还是以为,tomcat配置的问题,后面发现,配置了tomcat里面的catalina.bat文件,加入 setJAVA_OPTS=-Xms512m-Xmx1024m-XX......