Day11多态部分-6 【1.3 对象的向上转型和向下转型】
【1.3 对象的向上转型和向下转型】
- + -
向上转型
子类对象赋值给父类类型的引用时 会自动将子类对象对应的类型
提升为父类类型
语法:
父类类型 引用 = new 子类的构造方法();
特点:
此时 该引用只能调用父类中所有可见的属性和方法
不能调用子类特有的属性和方法
向下转型
将父类对象引用强制转为子类类型的过程
语法:
子类类型 引用 = (子类类型)父类对象引用;
特点:
1.此时 该引用可以调用子类特有的方法,同时还可以调用从父类中继承过来的所有方法
2.在进行强制类型转换之前,一定要使用instanceof关键字判断一下 否则运行时很容易抛出"ClassCastException" 类型强制转换异常
java.lang.ClassCastException 类型制转转换异常;
【instanceof 运算符】 用来在运行时 指出对象是否是特定类型的一个实例
【instanceof 语法】: 对象 instanceof 类型
【结果是boolean类型】:
true: 对象属于该类型
false: 对象不属于该类型
- + -
/* Animal1 c = new Cat1(); //有个人来给你爸爸去讲课 讲电工培训,
但爸爸不在,我又想挣这钱,就易容成我爸爸,
show(c);//然后去讲课,我只会讲java培训,问讲的是什么课?
还是Java因为实际讲课人是我;
Dog1 dd =(Dog1 ) d;//现在女友来找逛街,
但我此时还是易容成我爸爸的样子,
现在偷偷要去卸妆才出来
* dd.show2();//然后和女友逛街
*/
/*
一个儿子经过化妆成了父亲,但他实际上还是儿子,
那么他做的事(行为),是儿子做的呢?还是父亲做的呢?
显然还是儿子,化了妆的儿子,必须先从'父亲'卸妆成儿子
,才能干儿子特有的事(行为)
*/
- + -
public static void main(String[] args) {
Animal1 c = new Cat1();
show(c);
/*ClassCastException" 类型强制转换异常
Day11.Dog1 cannot be cast to Day11.Cat1 Day11。
狗1不能被扔到Day11.Cat1
Dog1 dd = (Dog1) d;
show(d);*/
Animal1 d = new Dog1();
show(d);
Animal1 p = new Pig1();
show(p);
}
public static void show(Animal1 tmp){//1.进来的是Animal1的引用
tmp.eat();
// Cat1 t = (Cat1) tmp;//(向下转型 )2.转成Cat1的引用
// t.show1();//3.再调Cat1特有的功能
if(tmp instanceof Cat1){//如果tmp进来的是猫就
Cat1 t = (Cat1) tmp;
t.show1();
}else if(tmp instanceof Dog1){//否则 如果进来的是狗就
Dog1 d =(Dog1) tmp;
d.show2();
}else if(tmp instanceof Pig1){
Pig1 p =(Pig1) tmp;
p.show3();
}
}
package Day11;
public class Test_03 {
public static void main(String[] args) {
// Manager m =new Manager("000","小");
// m.work();
// m.managerwork();
Employee manager = new Manager("001", "张三丰");
Employee sales = new Sales("002", "欧拉");
Test_03 boss =new Test_03();
boss.show(manager);
boss.show(sales);
}
public static void show(Employee tmp) {// 在Main里普通方法要加static
System.out.println("工号" + tmp.getWorkId());
tmp.work();
if (tmp instanceof Manager) {
Manager m = (Manager) tmp;
m.managerwork();
// tmp.setName("黎经理");
// ((Manager) tmp).managerwork();
} else if (tmp instanceof Sales) {
Sales n = (Sales) tmp;
n.sale();
// tmp.setName("黄经理");
// ((Sales) tmp).managerwork();
}
}
}
class Employee {
private String workId;// workid
private String name;
public Employee() {// 无参构造没有void只有public
super();// 不写也是默认存在的
}
public Employee(String workId, String name) {
super();// 不写也是默认存在的
this.workId = workId;
this.name = name;
}
public void setWorkId(String workId) {
this.workId = workId;
}
public String getWorkId() {
return workId;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void work() {
System.out.println("员工都要开会!");
}
}
class Manager extends Employee {// 经理
public Manager() {// 无参
super();
}
public Manager(String workId, String name) {// 有参
super(workId,name);
}
public void managerwork() {
System.out.println("经理[" + getName() + "],管理普通员工");
}
}
class Sales extends Employee {// 销售
public Sales() {// 无参
super();
}
public Sales(String workId, String name) {// 有参
super(workId,name);
}
public void sale() {
System.out.println("销售部的[" + getName() + "],销售业绩排第一");
}
}
- + -
- + -
Day11多态部分-6 【1.3 对象的向上转型和向下转型】相关推荐
- java:多态详解,以及对象的向上和向下转型
大家好,兔胆包天我又来啦,今天给大家分享的是多态,多态最主要的是父类引用指向子类对象,还是老办法,直接上代码,代码中注解的很详细哦. 这是第一个代码: //测试多态 public class Anim ...
- 【Java挠头】继承、抽象、接口、多态、向上转型、向下转型等精妙干货
–本文摘要– 1.本文的目标读者:是了解Java基础,且对面向对象概念有所了解,但是对Java中继承.抽象类.接口.多态等等概念搞不清的初学者. 2.本文的内容摘要:讲述Java中的一 ...
- 第三次学JAVA再学不好就吃翔(part35)--多态向上转型和向下转型
学习笔记,仅供参考 文章目录 面向对象 多态 多态向上转型和向下转型 多态的好处和弊端 面向对象 多态 多态向上转型和向下转型 我们首先通过以下代码复习一下自动类型提升和强制类型转换: class B ...
- 【转】面向对象之多态(向上转型与向下转型)
转:https://blog.csdn.net/qq_31655965/article/details/54746235. 多态,大概每个人都知道.但是,又有几个人真的理解什么是多态.多态有哪些细节呢 ...
- chapter7 面向对象之向上转型、向下转型及多态
文章目录 1.对象类型转换 1.1向上转型 1.2向下转型 2.多态 1.对象类型转换 将一个类型强制转换成另一个类型的过程被称为类型转换.本节所说的对象类型转换,是指存在继承关系的对象,不是任意类型 ...
- 【JavaSE】面向对象之多态、向上转型与向下转型
本专栏为 JavaSE 的学习笔记及相关项目,专栏长期免费更新 ❤️ ❤️ ❤️ ❤️ 个人主页:Nezuko627 欢迎来访~~~ ⭐️往期回顾: [JavaSE]继承中内存发生了什么变化?这篇文章 ...
- 多态的向上转型与向下转型
多态的向上转型与向下转型 多态的转型分为向上转型与向下转型两种: A:向上转型:当有子类对象赋值给一个父类引用时,便是向上转型,多态本身就是向上转型的过程. 使用格式: 父类类型 变量名 = new ...
- 多态、向上转型、向下转型
7.2.1 引入 多态是继封装.继承之后,面向对象的第三大特性. 生活中,比如求面积的功能,圆.矩形.三角形实现起来是不一样的.跑的动作,小猫.小狗和大象,跑起来是不一样的.再比如飞的动作,昆虫.鸟类 ...
- 秒懂Java多态的引用类型转换——向上转型、向下转型(强制转型)
多态的转型分为向上转型和向下转型两种 向上转型 多态本身是子类类型向父类类型向上转换的过程,这个过程是默认的.当父类引用指向一个子类对象时,便是向上转型. 使用格式: 父类类型 变量名 = new 子 ...
最新文章
- 学习进度条(第一周)
- 拒绝从入门到放弃_《鸟哥的 Linux 私房菜 — 基础学习篇(第三版)》必读目录
- Apache Rewrite的主要功能
- Python入门图文解说
- java 1.8有没有jshell_收藏了800道Java后端经典面试题,分享给大家,希望你找到自己理想的Offer呀~...
- 称新手机是“二手货” 消费者起诉要求三倍赔偿
- 键盘皇者 RealForce 104Pro独家评测
- 小程序学习笔记(2)-简单的小例子了解小程序的语法
- 仿链家地图找房的简单实现
- 房屋户型图识别方法AI自适应墙体识别
- 电子元器件检测与维修从入门到精通视频教程
- 六轴传感器MPU6050
- PowerBI-筛选器函数-KEEPFILTERS
- 《联众》并购案细节公布,海虹海外公司浮出水面(ZT)
- Android有道词典开发
- vue中父传子,父传孙说明
- 【GIT】error: failed to push some refs to 'https://github.com/username/python.git'
- 四舍五入VS银行家舍入 (四舍六入五取偶)
- WHQL认证和代码签名
- XSS(Cross Site Scripting)攻击简介
热门文章
- HttpClient 调用WebAPI时—传参的三种方式(ASP.NET MVCCORE均适用)
- WAMP中的MySQL设置密码(默认密码为空)
- 第一章 SDN介绍 (附件3)【云计算,SDN,虚拟化三者关系】
- SQL基础【三、Select】
- Condition中的transferForSignal()方法的不解
- Selenium2之Web自动化编写API(Java)
- 洛谷 P1849 [USACO12MAR]拖拉机Tractor
- android BluetoothAdapter无法搜索到蓝牙问题
- Flask 生成下载文件
- 刚回到北京,倒时差中……