黑马程序员技术交流社区
标题:
多态问题
[打印本页]
作者:
王广彬
时间:
2012-8-8 21:24
标题:
多态问题
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的对象,即使不判断也应该可以输出"猫爱睡觉"啊,那为什么如果不判断就输不出来呢?
请各位大侠给说说.小弟在此谢过!
作者:
黑马张涛
时间:
2012-8-8 22:08
你直接替换了,调用了c.sleep()吗?
作者:
朱烈葵
时间:
2012-8-8 22:20
看了半天 我也想楼上的问题,你调用了吗
作者:
yb61776662
时间:
2012-8-8 22:29
这个关于 向上转型和向下转型
Animal 是动物类 Dog是狗类 Cat是猫类
Animal a = new Dog(); //向上转型
//使用Dog中特有的方法
Dog d = (Dog) a; //向下转型
//注意:不能转换成不同类型的
Cat c = (Cat)a;
举例:
孔子爹:教课(java)
孔子:教课(论语),玩游戏()
//多态
孔子爹 k爹 = new 孔子(); //孔子就穿上他爹的衣服,装爹 向上转型
k爹.教课(); //论语
//k爹.玩游戏();
孔子 k = (孔子) k爹; //脱下衣服,穿上自己衣服。向下转型
k.玩游戏();
instanceof关键字
用于判断某个对象是否是某种引用类型的。
作者:
乐凡
时间:
2012-8-8 23:10
没调用怎么会运行方法呢!
作者:
王广彬
时间:
2012-8-9 18:46
我擦,我还是撞墙去吧,搞老半天竟然是没调用,粗心大意害死人啊!各位不好意思,打扰了!
作者:
王广彬
时间:
2012-8-10 00:13
问题已解决!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2