Day11多态部分-6 【1.3 对象的向上转型和向下转型】
来源:互联网 发布:待遇好的建筑公司知乎 编辑:程序博客网 时间:2024/06/05 02:00
【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 多态部分 向上转型 向下转型
- Java 多态部分 向上转型 向下转型
- 向上转型和向下转型的问题
- Java的向上转型和向下转型
- Java的向上转型和向下转型
- Java的【向上转型】和【向下转型】
- java的向上转型和向下转型
- 对象转型(向上转型和向下转型)
- 多态之:向下转型和向上转型
- java多态中的向上转型和向下转型
- Java向上转型和向下转型(多态核心)
- java多态向上转型和向下转型
- java 多态中的向上转型和向下转型
- Python简化类例八:静态变量或方法的定义
- input()函数同时输入多个数据为多个变量赋值
- Day11多态部分-5
- mybatis:Parameter 'ids' not found. Available parameters are [templateId, param1, param2, valueList]
- HDU4825 Xor Sum 0-1字典树 最大异或和
- Day11多态部分-6 【1.3 对象的向上转型和向下转型】
- Unity绘制圆半径内随机点
- 中序遍历+后序遍历/前序遍历构建二叉树
- bzoj 2429: [HAOI2006]聪明的猴子(最小生成树)
- [paper]End-to-End Training of Hybrid CNN-CRF Models for Stereo
- 6.5 接口回调
- 11/24 C/C++/Python程序bainchen
- Day11多态部分-6 【1.4 多态的应用以及注意事项】
- PAT乙级1047 编程赛团体