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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© pig3156661 初级黑马   /  2014-7-31 22:34  /  1182 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Demo
{
        int show(int a,int b)
        {return 0 ;}
}
问下列哪些函数可以存在于Demo的子类中
A. public int show (int a, int b){return 0;}
B. private int show (int a, int b){return 0;}
C. private int show (int a, long b){return 0;}
D. public short show (int a, int b){return 0;}
E. static int show (int a, int b){return 0;}

视频里面的一道题,别的都明白,就是D不明白为什么不可以和给定函数出现在子父类中,求大神给解答。

8 个回复

倒序浏览
这个,我也以为D是可以的。查了一下Java语言规范,很遗憾,规定说如果返回值是基本类型,那么return的类型和返回值类型必须一模一样。只有当返回值是引用类型时,才允许return 子类对象给父类返回值。
回复 使用道具 举报
fantacyleo 发表于 2014-7-31 22:50
这个,我也以为D是可以的。查了一下Java语言规范,很遗憾,规定说如果返回值是基本类型,那么return的类型 ...

呃……没听太明白,就是说基本类型的话,子父类的返回值类型需要一样,如果是引用类型,那子父类返回值类型就可以不一样了?

点评

引用类型时,子类和父类是继承关系,就是is a原则啊,即子类即父类。类型是一样的。  发表于 2014-8-1 10:59
回复 使用道具 举报
D 返回类型的问题。既然是覆盖,那么怎能提供毫不相干的返回类型,short又不能自动转型为int
回复 使用道具 举报
pig3156661 发表于 2014-7-31 23:09
呃……没听太明白,就是说基本类型的话,子父类的返回值类型需要一样,如果是引用类型,那子父类返回值类 ...

当你在覆盖父类方法时,如果父类方法的返回值是基本类型,那么子类方法的返回值必须和父类一模一样。如果父类方法的返回值是引用类型,那么子类覆盖方法的返回值可以是父类方法返回值的子类
回复 使用道具 举报
是Dmeo子类,说明这个类继承Demo,即这个类也有Demo方法,而同一个类中除了重载或重写外,不允许有类名重复方法,而D,E既不是重载也不是重写,当然不可以存在了
回复 使用道具 举报
函数重载的说明说的很清楚的:参数个数不同或者参数类型不同;而返回值类型不同并不满足重载的要求。
回复 使用道具 举报
谢谢楼上大家的帮忙!我明白了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马