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

  • 继承父类并重写方法
  • 父类引用指向子类对象: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. jsp第十周

    数据库test 中建个表 stu(stuid 主键 自动增长 ,用户名,密码,年龄) 1.设计一个注册页面,实现用户注册功能2.设计一个登陆页面,实现用户名密码登陆3.两个页面可以互相超链接 Base ...

  2. OSIDP-内存管理-07

    专业术语 页框:内存中固定长度的块. 页:外存中固定长度的块. 段:外存中可变长度的块. 内存管理需求 重定位:程序从内存换出到外存后,再换回内存时,在内存空间中的位置和原先的位置有极大可能不相同.此 ...

  3. Mysql 的用户权限等操作管理与设置(创建、授权、修改、查看)

    注:请在 MySql 的客户端操作 1.创建用户 CREATE USER 'username'@'host' IDENTIFIED BY 'password';//例 CREATE USER 'use ...

  4. C/C++命名规范-C语言基础

    这一篇文章想要介绍的是编写代码的时候业界比较常用的一些命名规范,以及个人平时的一些命名规范.涉及"驼峰命名法"."下划线命名法"."帕斯卡命名法&qu ...

  5. java8 stream按某个字段分组,允许分组字段是null

    Map<String, List<Dto>> deviceMap = deviceList.stream().collect(Collectors.groupingBy(Dto ...

  6. kafka-集群搭建及启动脚本

    集群搭建: [root@localhost kafka_2.11-0.10.2.1]# cat config/server.properties | grep -v ^$ | grep -v ^# b ...

  7. 11. ASCII, unicode, utf-8, gbk的区别

    这是几种编码方式 ASCII是包含英文字母数字特殊字符等, 长度是1字节, 前128个是基础ASCII码, 128个以后是扩展ASCII码 GBK是国标扩展码, 长度2字节, 表示汉字以及各少数民族语 ...

  8. 使用Wireshark查看HTTPS中TLS握手过程

    通过使用Wireshark抓包分析TLS握手的过程,可以更容易理解和验证TLS协议,本文将先介绍Wireshark解密HTTPS流量的方法,然后分别验证TLS握手过程和TLS会话恢复的过程. 一.使用 ...

  9. 使用vite创建vue3 遇到 process is not defined

    今天新建项目遇到报错,查资料得出,需要在vite.config.js中添加代码如下 import { defineConfig } from 'vite' import vue from '@vite ...

  10. maven 多模块项目的测试覆盖率分析 - jacoco 聚合分析

    前言 对于大多数 maven 多模块化工程,可以使用 Jacoco 这款工具,关于 Jacoco 这款工具,ChatGPT 对它的描述是这样的: JaCoCo(Java Code Coverage)是 ...