多态中向上转型和向下转型

2024-09-04 07:32
文章标签 多态 转型 向下 向上

本文主要是介绍多态中向上转型和向下转型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

提醒:理解这些的时候要记得继承啊方法重写它们存在的意义所在。就好理解啦。


多态的弊端

不能使用子类的特有功能。

/*多态的弊端:不能使用子类的特有功能。
*/
class Fu{public void show(){System.out.println("show Fu");}
}class Zi extends Fu{//子类重写了show方法public void show(){System.out.println("show Zi");}//子类特有的方法methodpublic void method(){System.out.println("method Zi");}
}//测试类
class DuotaiBiduanTest{public static void main(String[] args){Fu f= new Zi();f.show();f.method();//编译报错。编译看左边,左父类没有method功能。}
}

如果就想使用子类的特有功能或者特有成员变量,怎么做?

向下转型


多态中向上转型和向下转型

1、引入
由于多态的弊端,不能使用子类的特有功能。
如果就想使用子类的特有功能,怎么做?
A:最原始的创建对象调用方法呗。(但是,很多时候不合理。而且,建了太多对象太占内存了)
B: 把父类的引用强制转换为子类的引用。(向下转型)

2、向下转型

/*程序测试结果:show Zimethod Zi*/
class Fu{public void show(){System.out.println("show Fu");}
}class Zi extends Fu{    //又忘了写extends。。。。。//子类重写了show方法public void show(){System.out.println("show Zi");}//子类特有的方法methodpublic void method(){System.out.println("method Zi");}
}//测试类
class DuotaiZhuanxingTest{public static void main(String[] args){Fu f= new Zi();f.show();//f.method();//编译报错。编译看左边,左父类没有method功能。Zi z= (Zi)f;  //左:父的引用 右:(强转)子的引用z.method();}
}

对象间转型问题

    向上转型:Fu f = new Zi();向下转型:Zi z = (Zi)f; //要求该f必须是能够转换为Zi的。
    /*----------孔子装爹案例帮助理解-----------*/class 孔子爹 {public int age = 40;public void teach() {System.out.println("讲解JavaSE");}}class 孔子 extends 孔子爹 {public int age = 20;public void teach() {System.out.println("讲解论语");}public void playGame() {System.out.println("英雄联盟");}}//Java课特别火,很多人来请孔子爹去讲课,这一天孔子爹被请走了//但是还有人来请,就剩孔子在家,价格还挺高。孔子一想,我是不是可以考虑去呢?//然后就穿上爹的衣服,带上爹的眼睛,粘上爹的胡子。就开始装爹//向上转型孔子爹 k爹 = new 孔子();//到人家那里去了System.out.println(k爹.age); //40k爹.teach(); //讲解论语//k爹.playGame(); //这是儿子才能做的//讲完了,下班回家了//脱下爹的装备,换上自己的装备//向下转型孔子 k = (孔子) k爹; System.out.println(k.age); //20k.teach(); //讲解论语k.playGame(); //英雄联盟

这篇关于多态中向上转型和向下转型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1135383

相关文章

JavaSE——封装、继承和多态

1. 封装 1.1 概念      面向对象程序三大特性:封装、继承、多态 。而类和对象阶段,主要研究的就是封装特性。何为封装呢?简单来说就是套壳屏蔽细节 。     比如:对于电脑这样一个复杂的设备,提供给用户的就只是:开关机、通过键盘输入,显示器, USB 插孔等,让用户来和计算机进行交互,完成日常事务。但实际上:电脑真正工作的却是CPU 、显卡、内存等一些硬件元件。

浅谈java向上转型和乡下转型

首先学习每一种知识都需要弄明白这知识是用来干什么使用的 简单理解:当对象被创建时,它可以被传递给这些方法中的任何一个,这意味着它依次被向上转型为每一个接口,由于java中这个设计接口的模式,使得这项工作不需要程序员付出任何特别的努力。 向上转型的作用:1、为了能够向上转型为多个基类型(由此而带来的灵活性) 2、使用接口的第二个原因却是与使用抽象基类相同,防止客户端创建该类的对象,并确保这仅仅

【JVM】JVM栈帧中的动态链接 与 Java的面向对象特性--多态

栈帧 每一次方法调用都会有一个对应的栈帧被压入栈(虚拟机栈)中,每一个方法调用结束后,都会有一个栈帧被弹出。 每个栈帧中包括:局部变量表、操作数栈、动态链接、方法返回地址。 JavaGuide:Java内存区域详解(重点) 动态链接 动态链接:指向运行时常量池中该栈帧所属方法的引用。 多态 多态允许不同类的对象对同一消息做出响应,但表现出不同的行为(即方法的多样性)。 多态

知名AIGC人工智能专家培训讲师唐兴通谈AI大模型数字化转型数字新媒体营销与数字化销售

在过去的二十年里,中国企业在数字营销领域经历了一场惊心动魄的变革。从最初的懵懂无知到如今的游刃有余,这一路走来,既有模仿学习的艰辛,也有创新突破的喜悦。然而,站在人工智能时代的门槛上,我们不禁要问:下一个十年,中国企业将如何在数字营销的浪潮中乘风破浪? 一、从跟风到精通:中国数字营销的进化史 回顾过去,中国企业在数字营销领域的发展可谓是一部"跟风学习"的编年史。从最初的搜索引擎营销(SEM),

MES系统如何支持企业进行数字化转型

MES系统(Manufacturing Execution System,制造执行系统)在企业数字化转型中扮演着至关重要的角色,它通过提供实时的生产数据、优化生产流程、提升质量管理水平、实现设备智能化管理以及促进企业内部协同和沟通等多种方式,支持企业实现全面的数字化转型。以下是MES系统如何支持企业进行数字化转型的详细分析:   一、提供实时生产数据与决策支持 MES系统能够实时采集生产过程

数字经济时代,零售企业如何实现以消费者为中心的数字化转型?

在数字经济时代,零售企业正面临着前所未有的挑战与机遇。随着消费者行为的数字化和多样化,传统的零售模式已难以满足市场需求。为了在激烈的市场竞争中立于不败之地,零售企业必须实现以消费者为中心的数字化转型。这一转型不仅仅是技术的升级,更是一场涉及企业战略、组织结构、运营模式和人才管理的深刻变革。本文将探讨零售企业在数字化转型过程中遇到的难点,并提出相应的解决策略,通过实际案例分析,展示如何通过综合措施进

java基础总结14-面向对象10(多态)

面向对象最核心的机制——动态绑定,也叫多态 1 通过下面的例子理解动态绑定,即多态 package javastudy.summary;class Animal {/*** 声明一个私有的成员变量name。*/private String name;/*** 在Animal类自定义的构造方法* @param name*/Animal(String name) {this.name = n

java基础总结13-面向对象9(对象转型)

对象转型分为两种:一种叫向上转型(父类对象的引用或者叫基类对象的引用指向子类对象,这就是向上转型),另一种叫向下转型。转型的意思是:如把float类型转成int类型,把double类型转成float类型,把long类型转成int类型,这些都叫转型。把一种形式转成另外一种形式就叫转型。除了基础数据类型的转型之外(基础数据类型的转型:大的可以转成小的,小的也可以转成大的。),对象领域里面也有对象之

亿发:中小型制造企业数字化转型典型场景、痛点、解决方案

随着全球制造业的不断发展,中小型制造企业正面临前所未有的挑战和机遇。数字化转型成为了企业提升竞争力、优化生产效率、应对市场变化的关键路径。然而,对于资源相对有限的中小型制造企业而言,数字化转型并非易事。他们在推进转型的过程中往往遇到许多典型场景和痛点。本文将分析这些场景及痛点,并给出针对性的解决方案,帮助中小制造企业成功迈向数字化。 场景一:生产计划与调度的复杂性 典型场景: 在生产过程

OOP三个基本特征:封装、继承、多态

OOP三个基本特征:封装、继承、多态 C++编程之—面向对象的三个基本特征 默认分类 2008-06-28 21:17:04 阅读12 评论1字号:大中小     面向对象的三个基本特征是:封装、继承、多态。     封装 封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。   封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信