多态是同一个行为具有多个不同表现形式,多态实现需要以下条件

  • 继承父类并重写方法
  • 父类引用指向子类对象:Animal a = new Cat();

多态实例:

//测试类
public class TestDog {
public static void main(String[] args) {
Animal a = new Dog();
System.out.println(a.name);//加载的是父类属性
a.move();//如果未重写move()是加载父类方法,但子类重写move()就加载子类方法
  } //这里move()如果被private、static、final修饰,就变成了静态绑定无法被重写。而多态是动态绑定。
   //那么此时父类调用父类方法,子类调用子类方法。
}
//父类
public class Animal {
String name = "animal";
void move() {
System.out.println("animal run");
}
}
//子类
public class Dog extends Animal{
String name ="dog";
@Override
void move() {
System.out.println("dog run");
}
}

解释:

  1. 父类引用变量指向子类时,自动调用父类的方法和变量,无法调用子类的新方法和方法。
  2. 但如果子类重写了父类的某个方法,通过父类引用变量调用时实际调用子类重写的方法。
  3. 如果通过父类引用变量调用的是静态方法,即使子类中该方法被重写,调用时也仍然与父类一致,因为父类的静态方法在父类加载时就已经加载了,在对象建立之前就存在了,无法被之后出现的子类对象复写。

————————————————
原文链接:https://blog.csdn.net/sttttttuttering/article/details/109272847

多态弊端:父类无法使用子类属性和方法,向下转型损失精度

多态优势:当作参数传入,多态提高扩展性。用关键字 instanceof 条件语句判断传入多态的类型,如果是动物是猫,就有抓老鼠的方法,如果是鸟,就有会飞的方法。

       if(a.instanceof Catch){
a.catchMouse();
}else if(a.instanceof bird){
a.fly();
}else ....

多态练习题:main方法执行结果?

public class TestPolymorphic {
public static void main(String[] args) {
A a= new B();
a.show();//B System.out.println("---------------");
B b=new C();
b.show();
}
}
public class A {
public void show() {
show2();
}
public void show2(){
System.out.println("A");
}

public class B extends A{
public void show2(){
System.out.println("B");
}
}
public class C extends B{
public void show(){
super.show();
}
public void show2(){
System.out.println("C");
}
}

测试结果:

B
---------------
C

多态 polymorphic的更多相关文章

  1. java之多态(Polymorphic)、动态绑定(Dynamic Binding)、迟绑定(Late Binding)

    今天,我们来说说java面向对象最核心的东西,多态.通过多态可以使我们的程序可复用性达到极致,这就是我们为什么要学多态的原因. “多态”(Polymorphic)也叫“动态绑定”(Dynamic Bi ...

  2. python flask_sqlalchemy 多态 polymorphic 实现单表继承

    sqlalchemy 多态 polymorphic 实现单表继承 sqlaclchemy中的单表继续就是以一个模型类为基类,其他模型类继承基类,所有模型类的的数据都存一张表里面(也可以是多张,只不过基 ...

  3. Javase中多态polymorphic的简单介绍

    -------------多态-----------------  (1)面向对象三大核心思想:    1.封装 2.继承 3.多态 (2)多态定义:父类的引用指向子类的对象.   (3)引用指的是父 ...

  4. 【Java基础】【09面向对象_多态&抽象类&接口】

    09.01_面向对象(多态的概述及其代码体现) A:多态(polymorphic)概述 事物存在的多种形态 B:多态前提 a:要有继承关系. b:要有方法重写. c:要有父类引用指向子类对象. C:案 ...

  5. 06 面向对象:多态&抽象类&接口&权限修饰符&内部类

    多态: /* 多态(polymorphic)概述 * 事物存在的多种形态 多态前提 * a:要有继承关系. * b:要有方法重写. * c:要有父类引用指向子类对象. * 成员变量 * 编译看左边(父 ...

  6. python 多态、多继承、函数重写、迭代器

    用于类的函数 issubclass(cls,class_or_tuple) 判断一个类是否继承自其他的类,如果此类cls是class或tuole中的一个派生(子类)则返回True,否则返回False ...

  7. 多态(day10)

    二十二 多态(Polymorphic) 函数重写(虚函数覆盖).多态概念 如果将基类中的某个成员函数声明为虚函数,那么子类与其具有相同原型的成员函数就也将是虚函数,并且对基类中的版本形成覆盖. 这时, ...

  8. JavaEE基础(九)

    1.面向对象(多态的概述及其代码体现) A:多态(polymorphic)概述 事物存在的多种形态 B:多态前提 a:要有继承关系. b:要有方法重写. c:要有父类引用指向子类对象. C:案例演示 ...

  9. C++程序结构---1

    C++ 基础教程Beta 版 原作:Juan Soulié 翻译:Jing Xu (aqua) 英文原版 本教程根据Juan Soulie的英文版C++教程翻译并改编. 本版为最新校对版,尚未定稿.如 ...

  10. day09<面向对象+>

    面向对象(多态的概述及其代码体现) 面向对象(多态中的成员访问特点之成员变量) 面向对象(多态中的成员访问特点之成员方法) 面向对象(多态中的成员访问特点之静态成员方法) 面向对象(超人的故事) 面向 ...

随机推荐

  1. Alibaba Cloud Linux 3.2104 64位安装mydumper-0.9.1

    1 下载 wget https://launchpad.net/mydumper/0.9/0.9.1/+download/mydumper-0.9.1.tar.gz tar -zxvf mydumpe ...

  2. Winform多线程访问UI控件问题

    Winform多线程无法访问UI控件,考虑使用委托方法解决.

  3. win10 wampserver升级 php7.0至 php7.2

    1.去官网下载php7.2 下载地址: https://windows.php.net/download#php-7.0 2.下载安装 visual c++ 2017 或  visual c++ 20 ...

  4. mybatis-config.xml头信息

    1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 P ...

  5. cf823div2C

    cf823div2C 题目链接 题目 给你两个字符串\(s_1,s_2\).每次操作可以让\(s_1\)的前k个和\(s_2\)的后k个交换.询问是否可以通过多次上述操作,使得\(s_1=s_2\). ...

  6. 我的JAVA后端技术选型(2020版)

    JAVA后端技术选型(2020版)集群网关: LVS+keepalived 或 HAProxy服务网关 : zuul1.x注册中心: Eureka,Zookeeper配置中心: Spring Clou ...

  7. jooq简单使用

    DSLContext首先简单的配置文件 <?xml version="1.0" encoding="UTF-8" standalone="yes ...

  8. CH573 CH582 CH579外设ADC例程讲解

    在adc的例程中共有六种AD测量,1.温度测量,2.单通道测量,3.DMA单通道测量,4.差分通道测量,5.触摸按键测量,6.中断方式单通道测量,接下来我们逐一描述. 粗调:粗调使得用0db测量VIN ...

  9. 2020.11.14 typeScript声明空间

    在ts中存在两种声明空间: 类型声明空间和变量声明空间. 类型声明空间: 1. class People {} 2. interface People {} 3. type People = {} 变 ...

  10. Linux系统mysql免安装版配置指南

    1.下载(/usr/local目录) wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.32-linux-glibc2.12-x ...