黑马程序员技术交流社区
标题:
书上一道类型转换疑问
[打印本页]
作者:
肖晓峰
时间:
2012-11-17 02:29
标题:
书上一道类型转换疑问
本帖最后由 肖晓峰 于 2012-11-17 13:49 编辑
class Furit{
}
class Apple extends Furit{
void makeApple(){
}
}
class Delicious extends Apple{
}
定义一个类型变量 :
Furit furit = new Delicious();
问 furit 可以调用makeApple方法吗?
我的答案是 不可以 因为父类虽然引用的是子类实例,但是父类本类中没有该方法 直接调用编译器会出现编译错误。
需要进行显示向下转换成Apple类型或者Delicious类型才能调用
但是书上的答案是 可以 但是没有解释。
我很困惑
作者:
张学永
时间:
2012-11-17 07:29
你的答案是正确的,如果furit 调用makeApple方法的话,必须向下转型。
如 Furit furit = new Delicious();
((Apple) furit).makeApple();
这样就可以调用了,多态中,子类调用方法的话,编译器会去看父类有没有相应的方法。而Furit没有该方法,会编译失败。
书上说可以,可能说的比较含糊吧,它的意思可能是(向下转型后)可以调用,只不过没那么做吧。
作者:
陈龙
时间:
2012-11-17 08:22
class Fruit{}
class Apple extends Fruit
{
void makeApple()
{
System.out.println("in apple");
}
}
class Delicious extends Apple
{
}
public class Test1{
public static void main(String args[]){
Fruit fruit = new Delicious();
fruit.makeApple();
}
}
运行会出项错误:The method makeApple() is undefined for the type Fruit
class Delicious extends Apple
{
}
public class Test1{
public static void main(String args[]){
Fruit fruit = new Delicious();
((Apple)fruit).makeApple();
}
}
如果改成((Apple)fruit).makeApple(); 则可以顺利运行,打印出in apple
所以书上的说法可能有误,这本书叫什么名字?
作者:
肖晓峰
时间:
2012-11-17 13:32
《JAVA语言程序设计基础篇第八版》 机械工业出版的那种
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2