feat(class22): 多态调用,instanceof对象类型检测
- 新增 Tortoise 和 Wolf 类,继承自 Animal 类并重写 run 方法 - Tortoise 类增加独有的 shrinkHead 方法 - 新增 Test 类,演示多态和强制类型转换的用法- 实现 go 方法,展示如何根据对象类型调用不同方法
This commit is contained in:
8
src/class22/Animal.java
Normal file
8
src/class22/Animal.java
Normal file
@@ -0,0 +1,8 @@
|
||||
package class22;
|
||||
|
||||
public class Animal {
|
||||
|
||||
public void run(){
|
||||
System.out.println("动物会跑~~~");
|
||||
}
|
||||
}
|
||||
36
src/class22/Test.java
Normal file
36
src/class22/Test.java
Normal file
@@ -0,0 +1,36 @@
|
||||
package class22;
|
||||
|
||||
public class Test {
|
||||
public static void main(String[] args) {
|
||||
Animal a1 = new Tortoise();
|
||||
a1.run();
|
||||
// 多态无法调用子类独有的方法
|
||||
// a1.shrinkHead();
|
||||
Tortoise t1 = (Tortoise)a1;
|
||||
t1.shrinkHead();
|
||||
// 强制转换
|
||||
// Wolf test1= (Wolf)a1;//运行时异常
|
||||
|
||||
|
||||
|
||||
|
||||
System.out.println("=========================");
|
||||
|
||||
Wolf w = new Wolf();
|
||||
go(w);
|
||||
Tortoise t = new Tortoise();
|
||||
go(t);
|
||||
}
|
||||
|
||||
public static void go(Animal w){
|
||||
System.out.println("开始......");
|
||||
w.run();
|
||||
if (w instanceof Tortoise) {
|
||||
Tortoise t=(Tortoise)w;
|
||||
t.shrinkHead();
|
||||
} else if (w instanceof Wolf) {
|
||||
Wolf w1=(Wolf)w;
|
||||
w1.run();
|
||||
}
|
||||
}
|
||||
}
|
||||
12
src/class22/Tortoise.java
Normal file
12
src/class22/Tortoise.java
Normal file
@@ -0,0 +1,12 @@
|
||||
package class22;
|
||||
|
||||
public class Tortoise extends Animal {
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
System.out.println("🐢跑的贼慢~~");
|
||||
}
|
||||
public void shrinkHead(){
|
||||
System.out.println("🐢缩头了~~");
|
||||
}
|
||||
}
|
||||
8
src/class22/Wolf.java
Normal file
8
src/class22/Wolf.java
Normal file
@@ -0,0 +1,8 @@
|
||||
package class22;
|
||||
|
||||
public class Wolf extends Animal {
|
||||
@Override
|
||||
public void run() {
|
||||
System.out.println("狼跑的贼溜~");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user