标题: 调用的不确定性的小疑惑 [打印本页] 作者: 袁术森 时间: 2013-3-10 14:32 标题: 调用的不确定性的小疑惑 class A
{
void show(){}
}
class B extends A
{
int show(){return 6;}
}
class Demo
{
B b=new B();
B.show();
}为什么int show()就会产生不确定性 而把int变为void就可以了呢
覆盖的条件不是同名函数吗 作者: 罗玉宁 时间: 2013-3-10 14:51
前面好像有这一方面的帖子。在这回答一下。
如果像你这样 b继承a,成功的话,那么就相当于在b中有两个show()方法 一个返回值为void,一个为int.
当你调用b对象的show()方法时,如 new B().show();
你知道调用的是void show(),还是有返回值的show()?
人都不知道调用的是哪一个,你说虚拟机知道调用那一个吗?
所以不行,子类中改成void show() 是子类重写了父类的方法。所以没事。如果还有疑问请看下面链接中帖子。 http://bbs.itheima.com/thread-40252-1-1.html作者: 张卫刚 时间: 2013-3-10 14:55
首先你要明白覆盖:你的问题主要明白第2个就解决了
1,子类覆盖父类,必须保证子类权限大于等于父类权限,才可以覆盖。
2: 子父类方法要一模一样。
3:静态只能覆盖静态。
如果你要有返回值这样写:
class A
{
int show(){return 0;} //返回值改成int
}
class B extends A
{
int show(){return 6;} //返回值改成int
}
class Demo
{ //如果你只是编译这块就不用写main函数了(程序运行入口方法)
B b=new B();
int c=b.show(); //1,这块应该是b.show();
}
//如果你不要返回值这样写
class A
{
void show(){} //返回值改成void
}
class B extends A
{
void show(){} //返回值改成void
}
class Demo
{
public static void main(String [] args){ //要写程序入口
B b=new B();
b.show();
}
}作者: 陈丽莉 时间: 2013-3-10 19:52
一二楼的回答很详细,帮你将帖子分类改成【已解决】了~ 尽量记得自己改哦,谢谢合作~