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

  • 继承父类并重写方法
  • 父类引用指向子类对象: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. 在脚手架中使用React

    1.导入react 和react-dom 两包 import React from 'react' import ReactDOM from 'react-dom' 2.调用React.createE ...

  2. Linux_GItlab

    Gitlab实战 Gitlab安装 Gitlab简单使用 配置Jenkins 向 Gitlab 拉取代码 配置gitlab 触发器 Gitlab安装 环境需求: 一台干净的新机器(防止端口冲突) 配置 ...

  3. Day02 差点水掉 欸呀呀

    Java狂神6.17星期四 知识行 冯诺依曼+图灵 软件+硬件 .......... 快捷键 ctrl+a 全选 ctrl+x 剪切 alt+F4 关闭窗口 win+r 运行 +cmd命令行 win+ ...

  4. C# 锁汇总

    一.前言 本文章汇总c#中常见的锁,基本都列出了该锁在微软官网的文章,一些不常用的锁也可以参考微软文章左侧的列表,方便温习回顾. 二.锁的分类 2.1.用户模式锁 1.volatile 关键字 vol ...

  5. axios实现无感刷新

    前言 最近在做需求的时候,涉及到登录token,产品提出一个问题:能不能让token过期时间长一点,我频繁的要去登录. 前端:后端,你能不能把token 过期时间设置的长一点. 后端:可以,但是那样做 ...

  6. 【omr】linux配置omr识别项目moonlight环境

    最近又做了第n次moonlight的环境配置 moonlight是相对成熟的omr系统 这里记录环境配置的基本步骤 (总的来说主要是用conda新建符合程序要求的python版本 然后装好bazel和 ...

  7. vue使用keepalive缓存上级页面

    参考: vue单页应用前进刷新后退不刷新方案探讨 vue,vue-router实现浏览器返回不刷新页面 vue 怎么处理当this.$router.go(-1)时,判断返回指定页面设置指定页面的kee ...

  8. 微信小程序页面间通的5种方式

    PageModel(页面模型)对小程序而言是很重要的一个概念,从app.json中也可以看到,小程序就是由一个个页面组成的. 如上图,这是一个常见结构的小程序:首页是一个双Tab框架PageA和Pag ...

  9. FIR滤波器的设计

    FIR数字滤波器的设计 线性相位FIR滤波器的特点 单位冲激响应:\(h(n),0\leq n\leq N-1\) 系统函数:\(H(z)=\sum_{n=0}^{N-1}h(n)z^{-n}\) 零 ...

  10. 功能测试--Fiddler

    Fiddler(更推荐Charles,很好用) 1.fiddler是什么?------客户端的所有请求都要先经过fiddler,然后转发到服务器:反之,服务器的所有响应,也会先经过fiddler,然后 ...