interface Animal //定义接口
{
public abstract void eat();
public abstract void play();
}
class Dog implements Animal
{
public void eat(){
System.out.println("狗爱啃骨头!");
}
public void play(){
System.out.println("狗爱玩球");
}
public void color(){
System.out.println("这条狗是黑色的!");
}
}
class Cat implements Animal
{
public void eat(){
System.out.println("猫喜欢吃鱼");
}
public void play(){
System.out.println("猫喜欢爬树");
}
public void sleep(){
System.out.println("猫爱睡觉");
}
}
class DuoTaiDemo
{
public static void main(String[] args)
{
Animal a=new Dog(); //向上转型
a.eat();
a.play();
Dog d=(Dog)a; //向下转向
d.color();
a=new Cat(); //向上转向
a.eat();
a.play();
//Cat c=(Cat)a;
if(a instanceof Dog){
d=(Dog)a;
d.color();
}else if(a instanceof Cat){
Cat c=(Cat)a;
c.sleep();
}
}
}
这段代码运行结果是:
狗爱啃骨头!
狗爱晚球
这条狗是黑色的!
猫喜欢吃鱼
猫喜欢爬树
猫爱睡觉
如果把
if(a instanceof Dog){
d=(Dog)a;
d.color();
}else if(a instanceof Cat){
Cat c=(Cat)a;
c.sleep();
}
直接换成
Cat c=(Cat)a;
结果是:
狗爱啃骨头!
狗爱晚球
这条狗是黑色的!
猫喜欢吃鱼
猫喜欢爬树
为什么使用a instanceof Cat判断之后就可以打印出"猫爱睡觉",如果不判断就打印不出来呢?
如果a是Cat的对象,即使不判断也应该可以输出"猫爱睡觉"啊,那为什么如果不判断就输不出来呢?
请各位大侠给说说.小弟在此谢过! |