向上转移和向下转型

news2024/9/20 1:19:26

向上转型

实际就是创建一个子类对象,将其当成父类对象来使用。格式:父类类型 对象名=new 子类类型();eg:Animal animal=new Cat();animal是父类类型,但可以引用一个子类对象,因为是从小范围向大范围的装换

public class Main {
    public static void main(String[] args) {
        dog dog=new dog("az",1);
        dog.bark();
        dog.eat();
        System.out.println("=======");
        animal animal=new dog("ss",2);
//      animal.bark();调用不会成功
        animal.eat();
    }
}
class animal{
    public String name;
    public int age;
    public animal(String name,int age){
        this.age=age;
        this.name =name;
    }
    public void eat(){
        System.out.println(this.name+"正在吃饭...");
    }
}
class dog extends animal{
    public dog(String name,int age){
        super(name,age);
    }

    @Override
    public void eat() {
        System.out.println(this.name+"正在吃饭.");
    }
    public void bark(){
        System.out.println(this.name+"叫");
    }
}

animal.bark()调用不成功是因为bark()只有子类有,父类没有

向上转型的优点:让代码实现更简单灵活;缺点:不能调用到子类特有的方法

向下转型

将一个子类对象经过向上转型之后当成父类方法使用,再无法调用子类的方法,但有时候可能需要调用到子类特有的方法,此时:将父类引用再还原为子类对象即可,即向下转型

将上面的代码main改成如下:

public class Main {
    public static void main(String[] args) {
        dog dog=new dog("元宝",1);
        animal animal=dog;//向下转型
        dog.eat();
        //animal.bark();编译不成功,编译时编译器将animal当成animal对象处理,而animal类中没有bark方法

        //向上转型
        dog=(dog) animal;
        dog.bark();
    }
}

instanceof关键字

如果该表达式为true则可以安全转换

多态体现

 

public class Main {
    public static void main(String[] args) {
    rect rect=new rect();
    cycle cycle=new cycle();
    drawMap(rect);
    drawMap(cycle);
    }
    public static void drawMap(shape shape){
        shape.draw();
    }
}
class shape{
    //属性
    public void draw(){
        System.out.println("画图形");
    }
}
class rect extends shape{
    @Override
    public void draw() {
        System.out.println("※");
    }
}
class cycle extends shape{
    @Override
    public void draw() {
        System.out.println("圆");
    }
}

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

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

相关文章

超详细超实用!!!零基础java开发之云风笔记接口开发之查询单条笔记详细信息(十二)

云风网 云风笔记 云风知识库 一、service/NoteApi新增getNodeDetail接口定义 public interface NoteApi {...NoteManage getNoteDetail(int id); }二、service/impl/NoteServiceImpl接口实现逻辑 public class NoteServiceImpl implements NoteApi {AutowiredNoteMapper not…

产品经理入门攻略:如何从零开始成为产品经理

“人人都是产品经理”这句话相信你一定听过。 作为现在的热门职业,许多朋友也在心里埋下了一颗想要成为产品经理的种子。 产品经理的工作其实没有传说中的那么“高大上”,甚至可以说大多数时候是枯燥且无聊的,需要不断地对数据进行分析&…

如何在ONLYOFFICE文档中,将新插件添加为选项卡

随着 ONLYOFFICE 文档8.1版本的推出,我们引入了各式各样的功能,旨在增强软件功能性和优化用户体验。其中一项改进是,插件可以显示在一个独立的选项卡中了。在本博客文章中,我们将带您了解充分利用这一新功能的各项步骤。 关于 ONL…

图像修复(Inpainting)技术的前沿模型与数据集资源汇总

图像修复(Image Inpainting)是一种计算机视觉技术,旨在填补图像中的缺失区域或去除图像中的不需要部分,使其看起来自然且无明显痕迹。其目标是根据图像的上下文信息和周围像素来推断和重建缺失区域的内容,以生成逼真且…

实战17-NavBar+Vip布局

NavBar.ets import { PADDING } from ../../constants/size import rvp from ../../utils/resposive/rvIndexComponent export default struct NavBar {StorageProp(topHeight) topHeight: number 0;build() {Row() {Row({ space: rvp(6) }) {Text(请选择地址).fontSize(rvp(1…

Java基础笔记1】Java基础语法

目录 一、Java简介 二、JDK和Java初体验 三、配置环境变量 四、IDEA快捷键 五、Java语法基础 1. 注释 2. 字面量 3. 变量 4. 关键字和标识符 5. 变量详解 a. 数值数据在计算机中的存储​编辑 b. 文本、图片、音频等数据在计算机中的存储 c. 八进制和十六进制 6. 数据类型 a. …

【LabVIEW】事件结构的用法

本篇文章记录我学习LabVIEW的事件结构用法,希望我的分享对你有所帮助! 目录 一、案例说明 1、 LabVIEW实现“YAXBXC的计算” 2、添加事件结构 一、案例说明 在LabVIEW实现“YAXBXC的计算”的基础上,加上事件结构,实现单击一次按…

【读书笔记-《30天自制操作系统》-22】Day23

本篇内容比较简单,集中于显示问题。首先编写了应用程序使用的api_malloc,然后实现了在窗口中画点与画线的API与应用程序。有了窗口显示,还要实现关闭窗口的功能,于是在键盘输入API的基础上实现了按下按键关闭窗口。最后发现用上文…

初学者笔记本电脑玩转大模型系列二:微调谷歌Gemma模型

之前分享了《初学者笔记本电脑玩转大模型系列一:利用ollama跑大模型》,这不,Google发布了Gemma开放模型,同等参数尺寸性能最好的大模型,那么言归正传,如何在笔记本电脑微调Gemma模型呢?我们接下…

阿里云CTO:通义稳居全球最强开源大模型,性能接近GPT-4o

来源:首席数智官 9月19日,在2024杭州云栖大会上,阿里云CTO周靖人表示,阿里云正在围绕AI时代,树立一个AI基础设施的新标准,全面升级从服务器到计算、存储、网络、数据处理、模型训练和推理平台的技术架构体…

Temu应用全球下载量突破7.35亿次!美国占27%,还是主要市场

据了解,随着购物者更多选择Temu作为实惠的在线购物目的地,其月访问量在今年第一季度跃升至5亿次以上,应用下载量也大幅增加。据外媒报道,根据Stocklytics的最新数据,Temu应用程序截至目前的下载量已超过7.35亿次。 最新…

动态线程池(二)

动态线程池 环境搭建 启动Nacos和redis 安装Node-Exporter 安装Prometheus 安装Grafana 源码解析

鸢尾花书实践和知识记录[数学要素3-2乘除]

书的作者 文章目录 算术乘除:先乘除,后加减,括号内先算基本的乘法运算计算阶乘基本除法 向量的乘法:标量乘法,向量内积,逐项积标量乘法向量的内积对于inner和dot的实现方式的探究逐项积dot的计算过程 逐项…

MAC如何获取文件数字签名和进程名称

1、安装需要查看数字签名和进程名称的软件包 2、打开终端命令行(Terminal) 3、查找数字签名 在终端命令行中输入: codesign -dvv 安装的软件路径 2>&1 | grep "Authority=" | head -n 1 | cut -d = -f2”

PDF使用虚拟列表技术做渲染和加载带来的问题

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

JavaFX实现视频播放功能

一、前言 最近使用javaFx写了个简单的视频播放功能,可以实现打开本地视频播放。 二、实现 1.使用jdk8自带的javaFx包实现,首先定义一个类VideoPlayer。 代码如下: import javafx.application.Application; import javafx.application.Platf…

LAN8720A-CP-TR-ABC QFN-24 以太网收发器芯片

功能: 高性能收发器:支持10BASE-T和100BASE-TX标准,能够自动协商最佳速度和双工模式。 小尺寸:是业界尺寸最小的解决方案,适合空间受限的应用场景。 低功耗:功耗比现有的Microchip收发器低40%&#x…

【Unity】URP Rendering总结

unity-urp-rendering 介绍 个人学习总结,不定期更新 仓库 Unity版本:2022.3.42 Unity URP渲染管线下相关的渲染demo和总结 1. GPUInstance 1.1 Graphics.DrawMeshInstanced 1.2 Graphics.DrawMeshInstancedIndirect 1.3 MeshRenderer.SetPropertyBlock…

MTK芯片机型的“工程固件” 红米note9 5G版资源预览 写入以及改写参数相关步骤解析

小米机型:小米5 小米5x 米6 米6x 米8 米9 米10系列 米11系列 米12系列 mix mix2 mix2s mix3 max max2 max3 note3 8se 9se cc9系列 米play 平板系列等分享 红米机型:红米note4 红米note4x 红米note5 红米note6 红米note7 红米note8 红米note8pro 红米s2 红米note7pro 红米…

【C++算法】模拟算法

替换所有的问号 题目链接 替换所有的问号https://leetcode.cn/problems/replace-all-s-to-avoid-consecutive-repeating-characters/description/ 算法原理 代码步骤 class Solution { public:string modifyString(string s) {int n s.size();for(int i 0; i < n; i){…