day09-引用数据类型转换(向上转型和向下转型)

This commit is contained in:
2026-01-25 10:28:22 +08:00
parent c53daf921c
commit 239ccdd278
5 changed files with 62 additions and 6 deletions

View File

@@ -0,0 +1,9 @@
package com.inmind.duotai08.downcast;
public abstract class Animal {
String name;
int age;
//吃的行为
public abstract void eat();
}

View File

@@ -0,0 +1,12 @@
package com.inmind.duotai08.downcast;
public class Cat extends Animal{
@Override
public void eat() {
System.out.println("猫吃鱼");
}
public void catchMouse(){
System.out.println("猫抓老鼠");
}
}

View File

@@ -0,0 +1,23 @@
package com.inmind.duotai08.downcast;
/*
学习的对象的向上转型和向下转型,也就是引用数据类型的数据类型转换(自动转换和强制类型转换)
注意多态的向下转型时一定要是对应的类型才能转换否则会报错java.lang.ClassCastException类型转换异常
*/
public class Demo10 {
public static void main(String[] args) {
//多态的写法
Animal a = new Dog();//父类引用指向子类对象,对象的向上转型,非常安全
a.eat();
//a.watchDoor();//编译看左边
//现在a就是一只狗我想让它看门
Dog dog = (Dog) a;
dog.watchDoor();
//现在a是一个动物让它变成猫抓老鼠
Cat cat = (Cat) a;
cat.catchMouse();
}
}

View File

@@ -0,0 +1,12 @@
package com.inmind.duotai08.downcast;
public class Dog extends Animal{
@Override
public void eat() {
System.out.println("狗吃骨头");
}
public void watchDoor(){
System.out.println("狗看门");
}
}

View File

@@ -13,12 +13,12 @@ public class Demo09 {
//以上代码没有多态所以有50个子类重复的代码就要编写或封装50次太繁琐
//多态写法
Employee e1 = new Teacher();
Employee e2 = new Assistant();
dTWork(e1);
dTWork(e2);
dTWork(teacher);
dTWork(assistant);
Employee e1 = new Teacher();//引用数据类型向上转型
Employee e2 = new Assistant();//引用数据类型向上转型
dTWork(e1);//引用数据类型向上转型
dTWork(e2);//引用数据类型向上转型
dTWork(teacher);//引用数据类型向上转型
dTWork(assistant);//引用数据类型向上转型
}
//定义一个父类类型接收子类对象,多态的写法