A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 袁术森 中级黑马   /  2013-3-10 14:32  /  1463 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class A
{
void show(){}
}
class B extends A
{
int show(){return 6;}
}
class Demo
{
B b=new B();
B.show();
}为什么int show()就会产生不确定性 而把int变为void就可以了呢
覆盖的条件不是同名函数吗

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 5分以下,鼓励一下吧

查看全部评分

3 个回复

倒序浏览
前面好像有这一方面的帖子。在这回答一下。
如果像你这样 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

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
首先你要明白覆盖:你的问题主要明白第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();
        }
}

评分

参与人数 1黑马币 +6 收起 理由
陈丽莉 + 6

查看全部评分

回复 使用道具 举报
一二楼的回答很详细,帮你将帖子分类改成【已解决】了~ 尽量记得自己改哦,谢谢合作~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马