java--多态的转型

2023-10-31

  java中的多态中的语法转换:

只有在是继承关系的前提下才可以进行转型

子---->父 ,向上转型(自动转型)
父---->子 ,向下转型(强制转换)

以下为例子:

public class duotai {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根

		Animal a2=new Cat();//向上转型,
		//在编译阶段只检查语法,认为a2是animal类型,当运行时,在堆内存创建birds类型赋值给a2
		a2.move();//猫在走路
		
		Cat y=(Cat)a2;//向下转型
		//目前的a2已经是animal了,将他强制转变为cat并用一个cat类型接收
		//向下转型是当需要子类类独有的方法是进行转型
		y.cat();//猫猫捉老鼠!!
		
		Animal a3=new birds();
		//强制转换异常
		//Cat x=(Cat)a3;//将一个内部是birds的类转换为cat,会异常,编译不会报错,因为在表面上看 
                        //来a3是animal类形
		//x.cat();
		
		System.out.println(a3 instanceof Cat);//结果为false,不执行
		//向下转型 以后都要判断
		if(a3 instanceof Cat){//instanceof运算符,判断是否可以转换
			//如果a6是cat,可以进行强制转换
			Cat x=(Cat)a3;
			x.cat();
		}
		
		
	}
}
//动物类,父类
class Animal{
	public void move(){
		System.out.println("动物在移动");
	}
}
//鸟类,子类
class birds extends Animal{
	public void move(){
		System.out.println("鸟在飞");
	}
}
//猫类,子类
class Cat extends Animal{
	public void move(){
		System.out.println("猫在走路");
	}
	public void cat(){
		System.out.println("猫猫捉老鼠!!!");
	}
}

当子类中的方法是独有的时,这时可以选择进行向下转型

instanceof运算符判断的应用:

public class duotai {

	public static void main(String[] args) {
		
		Animal q=new birds();
		Animal w=new Cat();
		
		if(q instanceof birds){
			birds z=(birds)q;
			z.sing();
		}else if(q instanceof Cat){
			Cat e=(Cat)q;
			e.cat();
		}
		
		if(w instanceof birds){
			birds a=(birds)w;
			a.sing();
		}else if(w instanceof Cat){
			Cat f=(Cat)w;
			f.cat();
		}

		
	}
}
//动物类,父类
class Animal{
	public void move(){
		System.out.println("动物在移动");
	}
}
//鸟类,子类
class birds extends Animal{
	public void move(){
		System.out.println("鸟在飞");
	}
	public void sing(){
		System.out.println("鸟在歌唱");
	}
}
//猫类,子类
class Cat extends Animal{
	public void move(){
		System.out.println("猫在走路");
	}
	public void cat(){
		System.out.println("猫猫捉老鼠!!!");
	}
}

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

java--多态的转型 的相关文章

随机推荐

  • 操作系统及驱动、进程、服务等解析

    操作系统是神马呢 顾名思义就是操作管理及控制计算机硬件与软件资源的计算机程序 同时也是计算机硬件和软件的接口 操作系统充当着用户和硬件设备之间桥梁的作用 用户可以通过操作系统让硬件设备工作实现自己想要的要求 但大部分是通过应用程序让操作系统
  • Java调用.exe文件

    package cn sos psasps public class TestExe public static void main String args Runtime runtime Runtime getRuntime test01
  • linux权限---【600,644,700,755,711,666,777】

    权限简介 Linux系统上对文件的权限有着严格的控制 用于如果相对某个文件执行某种操作 必须具有对应的权限方可执行成功 Linux下文件的权限类型一般包括读 写 执行 对应字母为 r w x Linux下权限的粒度有 拥有者 群组 其它组
  • 小故事理解TCP/IP连接时的三次握手

    在TCP IP协议中 TCP协议通过三次握手建立一个可靠的连接 示意图如下 下面通过一个小故事简单理解一下这三次握手的具体含义 一天 快递员小客 客户端 准备去小服 服务器 家去送快递 准备与服务器进行连接 当走到小服家门口发现 小服家大门
  • (附源码)springboot大学生防疫封校管理系统 毕业设计632124

    大学生防疫封校管理系统 摘 要 2019年12月19号中国武汉发生第一例新冠病毒的到来 大家都在听从政府的号召在居家隔离 不管是在城市还是在乡镇 农村 这引起我的注目 设计一套大学生防疫封校管理系统 疫情防控需要大家共同努力 团结对校园学生
  • Qt QCommandLinkButton学习

    widget h ifndef WIDGET H define WIDGET H include
  • Nginx的配置(转载)

    虚拟主机与域名解析 虚拟主机是使用特殊的软硬件技术 把一台运行在因特网上的服务器主机分成一台台 虚拟 的主机 每一台虚拟主机都具有独立的域名 具有完整的Internet服务器 WWW FTP Email等 功能 虚拟主机之间完全独立 并可由
  • CVPR 2023|3D模型分割新方法!不用人工标注,只需一次训练,未标注类别也能识别

    不需要人工标注 只需要一次训练 就能让3D模型理解语言并识别未标注过的类别 比如看下面这个例子 未标注的 unannotated 黑板和显示器 3D模型经过这个方法训练之后 就能很快 抓准 目标进行划分 再比如 给它分别输入sofa cou
  • python selenium 常用断言的使用方法

    assertEqual a b msg 测试失败时打印的信息 断言a和b是否相等 相等则测试用例通过 assertNotEqual a b msg 测试失败时打印的信息 断言a和b是否相等 不相等则测试用例通过 assertTrue x m
  • 蒙特卡洛模拟入门的几个小例子(R语言实现)

    嗯 第一个例子是怎么用蒙特卡洛模拟求pi的值 第二个是用蒙特卡洛模拟求解定积分 第三个是用蒙特卡洛模拟证券市场求解其收益 第四个是用蒙特卡洛模拟验证OLS的参数的无偏性 然后还要R是如何求导 计算导数的 R的点的形状的集合 以便于查看 转载
  • Python学习——捕获异常

    根据B站 黑马程序员 的python教程记录笔记 一 基本了解 看了标题之后可能会有疑惑 什么是捕获异常 为什么要捕获异常呢 如果在开发中 对某些代码的执行不能确定是否正确 可以增加 try 尝试 来 捕获异常 捕获异常最简单的语法格式 t
  • 在Windows中,开机自启动

    在Windows中 你可以按照以下步骤设置程序的开机自启动 1 使用快捷键 Win R 打开运行对话框 2 输入 shell startup 并点击 确定 这将打开当前用户的启动文件夹 3在启动文件夹中创建一个程序的快捷方式 可以右键点击文
  • 翻转数字,例如输入123 输出321 输入-12300 输出-321,输入1300 输出31,输入0 输出0。

    str1 input 请任意输入一串数字 第一种方法 if int str1 gt 0 判断大于0 print int str1 1 此处用int 避免str1是以0结尾字符串 int 后 0自然去除 elif int str1 lt 0
  • 【计算机网络】TCP详解

    计算机网络 传输层 TCP详解 传输层 TCP和UDP区别 优缺点 应用 用户数据报协议 UDP User Datagram Protocol 传输控制协议 TCP Transmission Control Protocol 无连接 面向连
  • vim插件3--dict

    vim插件3 dict 功能 vim dict插件主要用于从本地或者特定服务器查找相关数据 此功能正常情况下用不上 vim dict有一个不错的功能为从特定的字典文件中补全文本或单词 此外可以用 dict文件来实现不同类型代码的自动补全功能
  • HTML 展开收起

    1 授课老师教的展开收起的实现 Html部分 1 div class cont div class tab box2 table class caozuo cellspacing 0 tr th 操作详情 th th 操作人 th th 环
  • Redis学习0 -介绍及安装

    Redis 介绍 Redis是一个key value存储系统 数据库 redis支持存储的value类型有很多种 如string 字符串 list 链表 set 集合 zset 有序集合 和hash 哈希类型 安装redis库 因为我是用u
  • 简单易懂!如何制作系统启动盘(win7/win10/win11...),利用u盘重装系统!

    一 制作启动盘 1 准备一个空u盘 2 在电脑上下载光盘刻录工具 最新UltraISO官方免费下载 UltraISO软碟通中文官方网站 3 在电脑上下载光盘镜像文件 操作系统 选择自己需要的系统进行下载MSDN 我告诉你 做一个安静的工具站
  • 使用Docker容器搭建Kafka集群的详细过程讲解

    一 Kafka集群的搭建 1 拉取相关镜像 docker pull wurstmeister kafka docker pull zookeeper 2 运行zookeeper docker run d name zookeeper p 2
  • java--多态的转型

    java中的多态中的语法转换 只有在是继承关系的前提下才可以进行转型 子 gt 父 向上转型 自动转型 父 gt 子 向下转型 强制转换 以下为例子 public class duotai public static void main S