Java知识点汇总--多态

2023-11-05

1. 多态

1.1 多态的概述

  • 什么是多态
    同一个对象,在不同时刻表现出来的不同形态
  • 多态的前提
    • 要有继承或实现关系
    • 要有方法的重写
    • 要有父类引用指向子类对象
  • 代码演示:
  • 动物类
public class Animal {

    public void eat() {
        System.out.println("动物吃东西");
    }

}
  • 猫类
public class Cat extends Animal {

    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }

}

  • 测试类
public class AnimalDemo {
    public static void main(String[] args) {
        //有父类引用指向子类对象
        Animal a = new Cat();
    }
}

1.2 多态中的成员访问特点

  • 成员访问特点
    • 成员变量
      编译看父类,运行看父类
    • 成员方法
      编译看父类,运行看子类
  • 代码演示:
  • 动物类
public class Animal {
    public int age = 40;
    public void eat() {
        System.out.println("动物吃东西");
    }
}
  • 猫类
public class Cat extends Animal {
    public int age = 20;
    public int weight = 10;
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
    public void playGame() {
        System.out.println("猫捉迷藏");
    }
}
  • 测试类
public class AnimalDemo {
    public static void main(String[] args) {
        //有父类引用指向子类对象
        Animal a = new Cat();
        System.out.println(a.age);
//        System.out.println(a.weight);
        a.eat();
//        a.playGame();
    }
}
  • 运行截图:
    在这里插入图片描述

1.3 多态的好处和弊端

  • 好处
    提高程序的扩展性。定义方法时候,使用父类型作为参数,在使用的时候,使用具体的子类型参与操作
  • 弊端
    不能使用子类的特有成员

1.4 多态中的转型

  • 向上转型
    父类引用指向子类对象就是向上转型
  • 向下转型
    格式:
    子类型 对象名 = (子类型)父类引用;
  • 代码演示:
  • 动物类
public class Animal {
    public void eat() {
        System.out.println("动物吃东西");
    }
}
  • 猫类
public class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
    public void playGame() {
        System.out.println("猫捉迷藏");
    }
}
  • 测试类
public class AnimalDemo {
    public static void main(String[] args) {
        //多态
        //向上转型
        Animal a = new Cat();
        a.eat();
//      a.playGame();
        //向下转型
        Animal b = new Cat();
        //Cat c = (Cat)b;  //编译阶段没有错误,但是在运行阶段可能会出现classcastexception异常
        if(b instanceof Cat){  //校验b属于猫类还是狗类
        	Cat c = (Cat)b;
        	c.eat();
        	c.playGame();
        }
    }
}

1.5 多态的案例

  • 案例需求
    请采用多态的思想实现猫和狗的案例,并在测试类中进行测试
  • 代码实现
  • 动物类
public class Animal {
    private String name;
    private int age;
    public Animal() {
    }
    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public void eat() {
        System.out.println("动物吃东西");
    }
}
  • 猫类
public class Cat extends Animal {
    public Cat() {
    }
    public Cat(String name, int age) {
        super(name, age);
    }
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
}
  • 狗类
public class Dog extends Animal {
    public Dog() {
    }
    public Dog(String name, int age) {
        super(name, age);
    }
    @Override
    public void eat() {
        System.out.println("狗吃骨头");
    }
}
  • 测试类
public class AnimalDemo {
    public static void main(String[] args) {
        //创建猫类对象进行测试
        Animal a = new Cat();
        a.setName("加菲");
        a.setAge(5);
        System.out.println(a.getName() + "," + a.getAge());
        a.eat();
        a = new Cat("加菲", 5);
        System.out.println(a.getName() + "," + a.getAge());
        a.eat();
    }
}
  • 运行截图

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java知识点汇总--多态 的相关文章

  • 【javaSE】 反射与反射的使用

    文章目录 反射的定义 反射的用途 反射基本信息 反射相关的类 Class类 反射机制的起源 Class类中的相关方法 反射示例 获得Class对象的三种方式 反射的使用 反射优点和缺点 反射重点总结 总结 反射的定义 Java的反射 ref
  • jquery循环语句if-else if-else

    jquery循环语句if else if else callbackFun 函数 开始是写的if if else 结果是不管第一个if有没有匹配到 会再次判断 如果匹配到第二个if 则第二个if中的语句执行 没有匹配到第二个if 则else
  • 学编程太枯燥太难怎么办?

    大家好 我是老三 和大家分享一些我学编程的经历 那年二十 头发浓密如野狗 夏日炎炎 枯坐机房如木头 一根指头 颤颤巍巍如老叟 敲下了第一行 Hello World 开启了编程学习生涯 刚开始 参加的是学校的一个夏季编程训练营 起初是有学长学
  • python学习日记【13 - 面向对象三】

    面向对象三 继承简介 方法重写 super 多重继承 多态 属性和方法 继承简介 继承是面向对象三大特性之一 通过继承我们可以使一个类获取到其他类中的属性和方法 在定义类时 可以在类名后面的括号中指定当前类的父类 超类 基类 继承提高了类的
  • Java——多线程使用详解

    多线程 多线程就是同时执行多个应用程序 需要硬件的支持 同时执行 不是某个时间段同时 cpu切换的比较快 所有用户会感觉是在同时运行 并发与并行 并行 parallel 指在同一时刻 有多条指令在多个处理器上同时执行 并行必须借助于多核cp
  • Java中ASCII码与字符之间的相互转换

    ASCII码转字符 char word char 97 强制转换 字符转ASCII码 int value a 加
  • Java 解析http返回的xml数据

    Java 解析http返回的xml数据 写成txt文件 需求 每小时抓取给定api接口返回的xml数据 把xml数据保存为XML文件 把xml数据转换txt文件格式数据 保存txt文件 文件名以yyyyMMddHH0000 txt和yyyy
  • JAVA字符串的两种定义方式的区别

    关于JAVA中两种字符串定义方式的区别 第一次写 就当复习总结一下 希望能帮到需要的人吧 我们知道在JAVA中 对于字符串的实例化方式有两种 直接赋值 String str Hello World 构造方法实例化 String str ne
  • Tank大战游戏模拟(java版)

    Java小项目 坦克大战 1 任务分析 玩家进入游戏 通过操纵坦克来守卫基地 摧毁全部敌方坦克来取得胜利 如果基地被摧毁 或者玩家坦克被摧毁 则判定游戏失败 2 具体分析 图形用户界面使用GUI技术实现 游戏中坦克的方向转动可以通过四种不同
  • StringUtils常用方法+StringUtils详细介绍

    StringUtils用法 StringUtils详细介绍 博文来源 http yijianfengvip blog 163 com blog static 175273432201212221935832 public static vo
  • Java字符串分析器

    package StruingTokenizer import java util StringTokenizer public class StringTokenizer public static void main String ar
  • 树型结构——二叉数

    之前就说过我们的数据结构分为两种 分别是线性结构和非线性结构 我们今天要学的第一种线性结构就是树型结构 1 树型结构 树型结构并非我们熟悉的重点 所以在这里只做了解 概念 树是一种非线性的数据结构 它是由n n gt 0 个有限结点组成一个
  • C++ 抽象类

    抽象类 接口 接口描述了类的行为和功能 而无需完成类的特定实现 C 接口时通过抽象类实现的 设计抽象类的目的 是为了给其他类提供一个可以继承的适当的基类 抽象类本类不能被用于实例化对象 只能作为接口使用 注意 如果试图实例化一个抽象类的对象
  • String类详解

    目录 一 创建字符串的四种方式 1 直接赋值 2 通过构造方法创建对象 3 通过字符数组创建对象 4 通过String类的静态方法valueOf 任意数据类型 gt 转为字符串 二 字符串比较相等 equals方法 equalsIgnore
  • Java的多态特性

    学习笔记 多态 简单说 就是一个对象对应着不同类型 多态在代码中的体现 父类或者接口的引用指向其子类的对象 多态的好处 提高可维护性 由多态前提所保证 提高了代码的扩展性 多态的弊端 无法直接访问子类特有的成员 也就是说前期定义的内容不能使
  • Java之单元测试(JUnit单元测试框架)

    一 概述 单元测试就是针对最小的功能单元编写测试代码 Java程序最小的功能单元是方法 所以单元测试就是针对Java方法的测试 进而检查方法的正确性 常规测试有什么问题 只有一个main方法 如果一个方法的测试失败了 其他方法会受到影响 无
  • java实现简单的生成52张牌、三个人洗牌、码牌算法

    定义一个Pocker类 用于定义牌类 package demo public class Poker private String suit 花色 private int rank 数字 构造函数 public Poker String s
  • java 使用匿名内部类的方式创建线程并设置和获取线程名字

    有些方法需要传入接口的实例或者抽象类的实例对象 比如Thread有一个构造方法 Thread Runnable target 这时可以可以自定义类实现Runnable接口 重写接口中的方法 将自定义类的对象传入构造方法中 也可以使用匿名内部
  • Go_接口、多态、接口继承、空接口、类型断言

    接口 接口是把所有具有共性的方法定义在一起 是方法集 任何类型实现了接口中所有的方法 就是实现了这个接口 接口可以实现多态 接口传递的是地址值 接口定义及调用 定义格式 tepe 接口名 interface 方法名 参数 返回值 调用格式1
  • cnds

    csdn是全球知名中文IT技术交流平台 创建于1999年 包含原创博客 精品问答 职业培训 技术论坛 资源下载等产品服务 提供原创 优质 完整内容的专业IT技术开发社区 官网 https www csdn net 经常打错顺序 cnds c

随机推荐

  • C++【侯捷】——— 成员模板、模板特化、模板模板参数

    C 侯捷 成员模板 模板特化 模板模板参数 成员模板 模板特化 偏特化 模版模板参数 自己写的程序最好用namespace包起来 不要直接使用全局的using namespace 尤其是代码量比较多的大程序 成员模板 类模板在使用的时候 后
  • Vim的NerdTree插件

    在vundle插件管理的方式 直接在 vimrc中的Plugin段落中加入 Plugin scrooloose nerdtree 然后重启Vim并输入PluginInstall 即可完成安装 然后输入 NERDTreeToggle即可打开文
  • vue-property-decorator的简单介绍,一看就会

    参考 https github com kaorun343 vue property decorator 怎么使vue支持ts写法呢 我们需要用到vue property decorator 这个组件完全依赖于vue class compo
  • Layui学习笔记,隔壁都馋哭了

    添加一个Tab 切换用户管理 删除商品管理 删除所有tab 简单风格的Tab 网站设置 用户管理 权限分配 商品管理 订单管理 高度默认自适应 也可以随意固宽 2 Tab进行了响应式处理 所以无需担心数量多少 内容2 内容3 内容4 内容5
  • 【Unity Shader】unity海边波浪效果的实现

    效果图如下 GIF因为为了把图压小所以删掉了一些帧导致后面速度突然很快 实际效果并不是这样 PS 对于移动端 参考该文章 http www lsngo net 2018 03 22 unity seawave vertexcolor 之前在
  • react(56)——在项目中使用开发者工具redux-devtools-extension

    1 谷歌安装插件 需要访问外网 在谷歌商店中下载 也可以自己格外找资源 2 项目中添加redux devtools extension库 在终端运行cnpm add redux devtools extension即可 3 在store j
  • 使用cookie和session实现登录(简单原理解析)

    cookie 浏览器在客户端电脑硬盘中开辟的一块空间 主要用来存储服务端数据 比如sessionId cookie中的数据是以域名的形式进行区分的 cookie中的数据是有过期时间的超过时间会被浏览器自动删除 cookie中的数据可以随着请
  • 2023网络安全面试题(附答案)+面经

    前言 随着国家政策的扶持 网络安全行业也越来越为大众所熟知 相应的想要进入到网络安全行业的人也越来越多 为了拿到心仪的Offer之外 除了学好网络安全知识以外 还要应对好企业的面试 所以在这里我归纳总结了一些网络安全方面的常见面试题 希望能
  • 读磁盘概述

    磁盘结构 磁道C 磁头H 扇区S 一个磁盘有很多个盘面 上面是其中一个盘面 每个盘面对应一个磁头 磁盘的最小单元是扇区 通过CHS可以定位到一个确定的扇区 每个扇区一般是512个字节 CHS寻道方式 设置好寄存器的值 然后一个int 13就
  • [笔记]MySQL 删除重复数据

    通过内连接 INNER JOIN 方式删除重复数据 场景复现 CREATE TABLE user id bigint 11 AUTO INCREMENT name varchar 64 PRIMARY KEY id engine InnoD
  • Google guava之SortedMultiset简介说明

    转自 Google guava之SortedMultiset简介说明 下文笔者讲述guava中SortedMultiset集合的简介说明 如下所示 guava之SortedMultiset集合简介 SortedMultiset集合 可用于按
  • Android Context完全解析与各种获取Context方法

    Context类型 我们知道 Android应用都是使用Java语言来编写的 那么大家可以思考一下 一个Android程序和一个Java程序 他们最大的区别在哪里 划分界限又是什么呢 其实简单点分析 Android程序不像Java程序一样
  • Gnuradio+uhd驱动软件安装流程

    工作时一部分内容 需要用到gnuradio软件配置 属于软件无线电USRP的内容 不属于计算机视觉 只作为记录 一样的花费了较长时间 大概两周 终于安装成功 虽然有点脱离了自己的兴趣爱好 但也算近期的一个成果 将它分享出来 网上资料很杂乱
  • 二十四.刷题.14

    一个数如果恰好等于它的因子之和 这个数就称为 完数 例如6 1 2 3 编程找出1000以内的所有完数 include
  • 解决报错: PostCSS received undefined instead of CSS string

    解决方案1 可能本地有多个nodeJS版本 本地使用了nvm 之前切到另一个版本编译node sass后 再切换到另外一个nodeJS版本 导致的问题 注意 node sass是一个绑定libsass sass的一种版本 的nodeJS库
  • golang 协程的实现原理

    核心概念 要理解协程的实现 首先需要了解go中的三个非常重要的概念 它们分别是G M和P 没有看过golang源代码的可能会对它们感到陌生 这三项是协程最主要的组成部分 它们在golang的源代码中无处不在 G goroutine G是go
  • 一文概括常用图像处理算法

    本文总结了11种常用的图像处理算法 包含了预处理算法以及检测算法 并介绍了一些常用的开发库 一 算法 预处理算法 检测算法 在采集完图像后 首先会对图像进行预处理操作 保证图像的对比度清晰 水平 方便后续图像处理 常用的图像处理算法 1 图
  • 数学建模专栏 - 聚类分析入门:基本概念和MATLAB实现

    摘要 本文将介绍聚类分析的基本概念和MATLAB的实现方法 我们将先介绍聚类分析的概念和应用场景 然后介绍聚类算法的基本原理 最后用一个实际案例来演示如何使用MATLAB进行聚类分析 1 简介 聚类分析是一种无监督学习方法 用于将数据集分成
  • 关于servlet上传图片,显示不出来报 Get http://localhost:9095/assets/img/head/1656901332651.jpg 404错误

    目录 第一种解决方法 第二种解决方法 第三种方法 配置虚拟路径 不建议尝试 上传图片的工具类 我的tomcat是放在E liulanqi apache tomcat 9 0 62 webapps 第一种解决方法 将上传的图片路径改为上到到t
  • Java知识点汇总--多态

    Java多态 1 多态 1 1 多态的概述 1 2 多态中的成员访问特点 1 3 多态的好处和弊端 1 4 多态中的转型 1 5 多态的案例 1 多态 1 1 多态的概述 什么是多态 同一个对象 在不同时刻表现出来的不同形态 多态的前提 要