java 中动态数组向下转型

2024-06-14 01:28
文章标签 java 动态 数组 转型 向下

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

介绍

接的上面的,现在我们在两个子类student 和teacher中分别添加study 和teacher方法,但父类中没有该方法。那么就需要用到我们的向下转型了

代码

student

package hansunping;public class student extends person {private String name;public int age;private double score;public double getScore() {return score;}public void setScore(double score) {this.score = score;}public student( String name,int age, double score) {// TODO Auto-generated constructor stubsuper(name, age);this.score=score;}@Override//重写父类say方法public String say() {//返回名字年龄return super.say()+"scor="+score;}public void study() {System.out.println("学生"+getName()+"正在学习");//注意,这里子类没有getname方法,并且name在子类中private,要通过公有方法调用。}
}

teacher

package hansunping;public class teacher extends person {private double salary;public teacher(String name,int age,double salary ) {// TODO Auto-generated constructor stubsuper(name,age);this.salary=salary;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}@Overridepublic String say() {//返回名字年龄return super.say()+"scor="+salary;}public void tea() {System.out.println("老师"+getName()+"正在教书");//注意,这里父类没有getname方法,并且name在子类中private,要通过公有方法调用。}}

person父类

package hansunping;
public class person{private String name;public int age;public person(String name,int age) {// TODO Auto-generated constructor stubthis.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 String say() {//返回名字年龄return name+"\t"+age;}}

demon主类

package hansunping;public class demon1 {public static void main(String[] args) {person[] persons=new person[5];//你尝试创建一个名为 persons 的 Person 类型数组,该数组有5个元素:persons[0]=new person("jack", 20);persons[1]=new student("jack", 20,100);persons[2]=new student("smith", 18,30.1);persons[3]=new teacher("scott", 30,2000);persons[4]=new teacher("king", 30,2000);//循环遍历数组。调用sayfor (int i = 0; i < persons.length; i++) {System.out.println(persons[i].say());//动态绑定//persons[i].study(),如果这样的话,//persons[i].teach(),如果这样的话,由于编译类型是父类,父类没有study等方法。那么我们这里需要强制转换if (persons[i] instanceof student) {//instanceof是判断运行时的student stu=(student)persons[i];//向下转型,把person的转为student,也可以用(student)person[i].studystu.study();}else if (persons[i] instanceof teacher) {teacher te=(teacher)persons[i];te.tea();}else {System.out.println("对不起了,编译系统不支持");}}//、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、//如果我们将student类的say()方法注销,他寻找student类的say方法无果后,会再向它的父类调用say方法。返回我是人类,效果等同于}}

运行结果

jack	20
对不起了,编译系统不支持
jack	20scor=100.0
学生jack正在学习
smith	18scor=30.1
学生smith正在学习
scott	30scor=2000.0
老师scott正在教书
king	30scor=2000.0
老师king正在教书

那么为什么又  对不起编译系统不支持呢

persons[0]=new person("jack", 20);

这里还是有个运行对象为person类的

这就是我们的向下转型了 

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



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

相关文章

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

SpringCloud集成AlloyDB的示例代码

《SpringCloud集成AlloyDB的示例代码》AlloyDB是GoogleCloud提供的一种高度可扩展、强性能的关系型数据库服务,它兼容PostgreSQL,并提供了更快的查询性能... 目录1.AlloyDBjavascript是什么?AlloyDB 的工作原理2.搭建测试环境3.代码工程1.

Java调用Python代码的几种方法小结

《Java调用Python代码的几种方法小结》Python语言有丰富的系统管理、数据处理、统计类软件包,因此从java应用中调用Python代码的需求很常见、实用,本文介绍几种方法从java调用Pyt... 目录引言Java core使用ProcessBuilder使用Java脚本引擎总结引言python

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont

springboot整合 xxl-job及使用步骤

《springboot整合xxl-job及使用步骤》XXL-JOB是一个分布式任务调度平台,用于解决分布式系统中的任务调度和管理问题,文章详细介绍了XXL-JOB的架构,包括调度中心、执行器和Web... 目录一、xxl-job是什么二、使用步骤1. 下载并运行管理端代码2. 访问管理页面,确认是否启动成功

Java中的密码加密方式

《Java中的密码加密方式》文章介绍了Java中使用MD5算法对密码进行加密的方法,以及如何通过加盐和多重加密来提高密码的安全性,MD5是一种不可逆的哈希算法,适合用于存储密码,因为其输出的摘要长度固... 目录Java的密码加密方式密码加密一般的应用方式是总结Java的密码加密方式密码加密【这里采用的

Java中ArrayList的8种浅拷贝方式示例代码

《Java中ArrayList的8种浅拷贝方式示例代码》:本文主要介绍Java中ArrayList的8种浅拷贝方式的相关资料,讲解了Java中ArrayList的浅拷贝概念,并详细分享了八种实现浅... 目录引言什么是浅拷贝?ArrayList 浅拷贝的重要性方法一:使用构造函数方法二:使用 addAll(

解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题

《解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题》本文主要讲述了在使用MyBatis和MyBatis-Plus时遇到的绑定异常... 目录myBATis-plus-boot-starpythonter与mybatis-spring-b