Java学习多态之向上转型

news2024/9/21 16:44:33

目录

一、向上转型的本质

举例说明

父类-Animal

子类-Cat类

测试-PolyDetail

 语法

Object类

二、向上转型的特点

第一条

第二条

第三条

例子

Base类

TopBase类 

测试类

第四条

 运行结果


多态的前提:两个对象(类)存在继承关系

一、向上转型的本质

父类的引用指向了子类的对象

例如PolyObject.java中的

 animal就是父类Animal的引用,指向了子类Dog的对象

举例说明

父类-Animal

package com.hspedu.poly_.detail_;

public class Animal {
    String name = "动物";
    int age = 10;
    public void sleep(){
        System.out.println("睡");
    }
    public void run(){
        System.out.println("跑");
    }
    public void eat(){
        System.out.println("吃");
    }
    public void show(){
        System.out.println("hello,你好");
    }
}

子类-Cat类

package com.hspedu.poly_.detail_;

public class Cat extends Animal{
    String color = "白色";
    public void eat(){//方法重写
        System.out.println("猫吃鱼");
    }
    public void catchMouse(){//Cat特有方法
        System.out.println("猫抓老鼠");
    }
}

测试-PolyDetail

package com.hspedu.poly_.detail_;

public class PolyDetail {
    public static void main(String[] args) {
        //父类的引用指向了子类的对象 
        Animal animal = new Cat();

    }
}

 语法

父类类型 引用名 = new 子类类型()

Object类

如果在上述代码中添加

Object obj = new Cat();

编译能通过吗?

答案是:可以,因为Object是Animal的父类,同时也是Cat的父类

二、向上转型的特点

第一条

编译类型看左边,运行类型看右边

eg:

Object obj = new Cat();

编译类型是Object,运行类型是Cat

第二条

可以调用父类中的所有成员(同时也要遵守访问权限)

可以调用Animal类中的四个方法和两个属性 

如果将name的访问修饰符改成private,就不能访问了,如下图所示,没有name了

第三条

不能调用子类中特有的成员(属性和方法)

 catchMouse()是子类Cat类特有的成员

原因:在编译阶段, 能调用哪些成员,是由编译类型来决定的,即编译时是从编译类型开始到Object终止(即这些类的成员都可以被调用)

例子

新建Base类和TopBase类,让Animal继承Base,Base继承TopBase,此时仍然可以调用Base类和TopBase类中的成员

Base类

独有方法hi()

package com.hspedu.poly_.detail_;

public class Base extends TopBase {
    public void hi() {
        System.out.println("Base hi");
    }
}

TopBase类 

独有方法hi1()

package com.hspedu.poly_.detail_;

public class TopBase {
    public void hi1() {
        System.out.println("TopBase hi");
    }
}

测试类

 编译和运行都没有报错,是可以调用的

但是可以调用子类重写的父类的方法,因为父类也是有这个方法的

第四条

最终运行效果要看子类(运行类型)的具体实现

 

运行逻辑:运行类型是Cat类,所以先从Cat类开始查找,规则就是继承的本质一节中所讲的(属性和方法一样)

 运行结果

根据上述规则,因为子类中也有eat()方法,所以优先运行子类中的eat方法,其他五个方法同理,但是子类中没有,所以向上查找,直到Object类

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/68123.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【软件测试】测试新人咋迅速成为bug小能手?刮目相看......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 对于很多新入行测试…

Linux学习笔记

IO操作 概述 根据用户态和内核态的划分,用户态的进程是不能直接访问各种硬件资源的,只能向内核发起系统调用,由内核完成一系列操作再切回用户进程。 用户进程每次想要访问硬件资源(包括读和写)就叫做一次IO。 IO共有…

梦开始的地方——C语言文件操作详解

文章目录C语言文件操作1. 什么是文件?2.文件指针3.文件的打开和关闭4.文件的顺序读写fgetc&fputcfgets&fputsfread&fwritefscanf&fprintfscanf/fscanf/sscanf 对比 printf/fprintf/sprintf5.文件的随机读写(fseek&ftell &rewind)6. 文件结束…

兄弟机床联网

一、设备信息确认 1、确认型号 看面板颜色: 面板如果是彩色屏幕,大概率是可以做联网采集的。如果是黑白屏则需要进一步确认设备名牌。 看名牌: 名牌一般在设备后面,可以看到数控系统的品牌,一般C00和B00都是可以直接…

怎么写综述类论文? - 易智编译EaseEditing

一、确定综述的主题 每篇综述都应该有一个观点,即想要表达的事物。一篇综述不是简单的对相关发现的罗列。综述的真正功能是迈出下一步。已有的研究告诉了我们什么?以及我们下一步要怎么做? 确定综述的主题在撰写过程中是最重要的一步。这会…

快速上手几个Linux命令

Linux操作系统有很多功能,我们有很多方式可以使用这些功能,其中最简单和直接的方式就是命令行(Command Line) 用户与密码 当我们打开一个新系统的时候,第一件要做的事就是登录。系统默认有一个 Administrator 用户&a…

Vue学习:Vue中的数据代理

<!-- 准备容器 --><div idroot> <h2>学校名称&#xff1a;{{name}}</h2><h2>学校地址&#xff1a;{{adress}}</h2></div><script>const vm new Vue({ el: #root,data: {name:Jhon,adress:street 10},});</script> vm上…

8.javase_数组2

一 . 二维数组 (1)二维数组 元素为一维数组的数组 (2)定义格式&#xff1a; 数据类型[][] 变量名; int[][] arr; 数据类型 变量名[][]; int arr[][]; 数据类型[] 变量名[]; int[] arr[]; 二.二维数组初始化 (1)静态初始化 格式&#xff1a;数据类型[][] 变量名 new 数据类型…

PNG怎么转成PDF格式?这两种方法一定要尝试一下

图片文件是我们经常使用到的一种文件类型&#xff0c;但是我们通常会有很多的图片需要同时进行发送&#xff0c;这时候发送给别人就不是很便利了&#xff0c;我们一般会需要通过微信进行发送&#xff0c;但是大家都知道&#xff0c;微信一次只能发送九张图片&#xff0c;有时候…

【CDC跨时钟域信号处理】快时钟域到慢时钟域-单bit

快时钟域到慢时钟域分两种情况&#xff1a; 1、允许采样丢失&#xff1a;直接采用同步器即可。 2、不允许采样丢失&#xff1a;原理是保证快时钟域的信号宽度满足一定的条件&#xff0c;使得慢时钟域有足够的时间采样到。 对于情况2有两种方法解决&#xff1a;①信号展宽边沿检…

接口管理测试繁琐复杂?何不试试Eolink

一、前言 作为一名测试从业者&#xff0c;深刻的明白接口测试在项目过程中是多么重要的一个环节。通过页面进行的UI测试会因为界面不稳定而导致用例维护非常困难。另外&#xff0c;在检查系统的安全性、稳定性上面也是尤为重要的环节&#xff0c;这些也是无法通过前端测试的&a…

react-native webstorm 无法启动 Android 模拟器

react-native webstorm 无法启动 Android 模拟器 一、问题描述 在 安装完 Android Studio 和 模拟器之后&#xff0c;WebStorm 启动 react-native 项目时提示如下&#xff1a; No emulators found as an output of emulator -list-avds.二、解决办法 官方环境安装说明&#x…

汽车OTA技术门槛提升,具备软硬一体化能力的Tier1优势凸显

在软件定义汽车的大背景下&#xff0c;无论是传统车企还是造车新势力都在加大OTA的布局力度&#xff0c;整车OTA的普及应用已经成为必然趋势。 高工智能汽车研究院监测数据显示&#xff0c;2022年1-6月中国市场&#xff08;不含进出口&#xff09;乘用车标配搭载OTA上险量为40…

移动硬盘raw怎么办?一招教你解决RAW格式的文件

RAW文件格式是一种特殊的文件格式。RAW表示未处理&#xff0c;因此RAW也指未格式化的磁盘。移动硬盘里有 RAW格式的文件。这是什么原因造成的&#xff1f;以及我们该如何把移动硬盘raw里面的文件给恢复回来&#xff1f;来看看下面的解说&#xff0c;一起寻找解决方法吧&#xf…

阿里云国际站云计算-负载均衡SLB介绍-unirech

阿里云国际站的负载均衡SLB&#xff08;Server Load Balancer&#xff09;是一种对流量进行按需分发的服务&#xff0c;通过将流量分发到不同的后端服务器来扩展应用系统的吞吐能力&#xff0c;并且可以消除系统中的单点故障&#xff0c;提升应用系统的可用性。 阿里云国际站的…

研究研究 ES_OEMCONVERT 标志

ES_OEMCONVERT 这个标志&#xff0c;主要是用在 16 位 Windows 系统上。下面是一篇 MSDN 上的文章中对它的一段描述&#xff1a; ES_OEMCONVERT 会导致输入到编辑控件中的文本从 ANSI 转换为 OEM&#xff0c;然后再转换回 ANSI。这可确保在应用程序调用 AnsiToOem 函数将编辑控…

【在Vue脚手架项目中使用axios】

目录 1. 安装axios 2. 在main.js中添加配置 1. 安装axios 首先&#xff0c;需要安装axios&#xff0c;则在终端窗口中&#xff0c;在当前项目文件夹下&#xff0c;执行安装命令&#xff1a; 如果没有权限进入C盘找到cmd的执行软件&#xff0c;用管理员启动&#xff0c;进入目…

作为外贸业务员,为什么我经常随机轻松 就“捡“到精准潜在客户

心里夹杂着很多情绪和想法&#xff0c;沉浸在客户背调里面走不出来&#xff0c;但我还是决定不得不暂停下得心应手的google背调&#xff0c;记录一下此时此刻的想法。 01 我曾好多次在文章里表露出做外贸业务背调是非常关键的一环&#xff0c;而在背调里一些细微的关键信息非常…

自适应滤波器更新算法-EP3

文章目录1、PNLMS和IPNLMS算法1.1 算法原理2.2 算法分析2、一种改进的时变参数的比例自适应滤波算法2.1 算法原理2.2 算法分析2.3 算法性能评价标准2.3.1 均方误差(Mean Square Error, MSE)2.3.2 失调(Misalignment, MIS)2.3.3 回声衰减系数(Echo Return Loss Enhancement, ERL…

【音视频开发】为什么无损音频会有44.1Khz这样的奇葩采样率?

文章目录一、 问题&#xff1a;为什么无损音频会有44.1Khz这样的奇葩采样率&#xff1f;二 、PCM流程2.1 PCM流程2.2 PCM量化方式2.2 量化位数2.3 比特率三、答疑解惑3.1 使用采样定理来解释3.2 以影片磁带录音&#xff1f;硬件限制而来的 44.1kHz3.3 关于44100和质数的关系四、…