java吧 关注:1,221,893贴子:12,675,766
  • 0回复贴,共1

大佬进来看看

只看楼主收藏回复

package http://www.fs.com;
public class Test {
//test方法,判断输入是否能飞,入口参数只能是实现Animal的对象
public void test(Animal b){
//判断输入参数是否为CanFly的实现
if(b instanceof CanFly) {
CanFly a = (CanFly)b;//强转用来将一个指示为子类对象的父类引用转为子类引用
//这里可能是用来将Animal引用的子类b转为其子类CanFly引用
this.makeFly(a);
}else {
System.out.println("此对象不能飞");
}
}
//飞行方法,输入参数只能为CanFly的实现
public void makeFly(CanFly b) {
b.fly();
}
//主函数
public static void main(String[] args) {
Bird bb = new Bird();//新建一个Bird对象
Aircraft aa = new Aircraft();//新建一个飞机对象
Human hh= new Human();//新建一个人类对象
Bat bat = new Bat();//新建一个Bat对象
//上面新建了三个实现CanFly的对象
//四个实现Animal的对象
Test tt = new Test();//新建一个测试类对象
tt.test(bb);
tt.test(aa);
tt.test(hh);
tt.test(bat);//调用测试类对象中的测试方法判断对应对象能不能飞
}
}
为什么这里test方法里面能够强转


IP属地:江苏1楼2020-05-01 12:53回复