黑马程序员技术交流社区

标题: 调用的不确定性的小疑惑 [打印本页]

作者: 袁术森    时间: 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
一二楼的回答很详细,帮你将帖子分类改成【已解决】了~ 尽量记得自己改哦,谢谢合作~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2