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

  • 继承父类并重写方法
  • 父类引用指向子类对象: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. ceph 因权重问题导致pgs active+clean+remapped 状态

    1.现象: 2.原因:是因为前期权重调整不合理导致,调整回来就正常了 3.操作步骤: ceph osd crush reweight osd.2 0.98317    # osd 位置. 权重值 权重 ...

  2. 2、Java程序设计环境

    1.JDK Java开发工具箱 在Java 9之前,有32位和64位两个版本的Java开发工具包.现在Oracle公司不在开发32位版本,要使用Oracle JDK,你需要有一个64位的操作系统. 安 ...

  3. postcss-px-to-viewport适配屏幕大小

    1.postcss-px-to-viewport适配的介绍 postcss-px-to-viewport是一个插件,用起来非常方便,安装一下插件,搞个配置文件就可以直接用了. 2.postcss-px ...

  4. k8s重启应用

    [root@k8s-master01 opt_k8s]# cat app_list xxx-supervise-srv xxx-recon-srv xxx-mkt-strategy-srv xxx-u ...

  5. oracle 将以逗号分隔的列拆成多行的的方法

    原表如下 select * from hs_acct.custattach a where a.client_id='888827395'; 将列拆分成多行的语句 select * from ( -- ...

  6. Java中int型数据类型对应MySQL数据库中哪种类型?

    java类   mysql数据库 java.lang.Byte byte TINYINT java.lang.Short short SMALLINT java.lang.Integer intege ...

  7. 1011.Django状态保持以及表单

    一.session保持状态 状态保持: 1. http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态: 2. 客户端与服务器端的一次通信,就是一次会话实现状态保持的方式:在客户端或服 ...

  8. Matlab %补充---用的多的函数

    Input  promat = 'This is a sentence.' x = input(prompt) %显示prompt中的文本并等待用户输入数值或者表达式后按Return %如果用户什么都 ...

  9. Eclipse's Patching Codes Automatically

    如何把等号左边的赋值等式补齐? 想把queryRunner.query(conn, sql,new BeanListHandler<>(type), params); 的等号左边代码(返回 ...

  10. Hive使用Tez作为计算引擎,hive启动报错

    1.问题描述: (1)问题示例: 1)hive使用配置文件hive-site.xml配置tez为计算引擎,hive登录报错: [Hadoop@master Tmp]$ hiveHive Session ...