首页 > 试题广场 >

对于如下代码段可以放入到横线位置,使程序正确编译运行,而且不

[单选题]
对于如下代码段

class A{
    public A foo() {
        return this;
    }
}
class B extends A {
    public A foo(){
        return this;
    }
}
class C extends B {
    _______

}

可以放入到横线位置,使程序正确编译运行,而且不产生错误的选项是( )


  • public void foo(){}
  • public int foo(){return 1;}
  • public A foo(B b){return b;}
  • public A foo(){return A;}

重写 要求两同两小一大原则, 方法名相同,参数类型相同,子类返回类型小于等于父类方法返回类型, 子类抛出异常小于等于父类方法抛出异常, 子类访问权限大于等于父类方法访问权限。[注意:这里的返回类型必须要在有继承关系的前提下比较]

重载 方法名必须相同,参数类型必须不同,包括但不限于一项,参数数目,参数类型,参数顺序
再来说说这道题 A B 都是方法名和参数相同,是重写,但是返回类型没与父类返回类型有继承关系,错误 D 返回一个类错误 c的参数类型与父类不同,所以不是重写,可以理解为广义上的重载访问权限小于父类,都会显示错误
虽然题目没点明一定要重载或者重写,但是当你的方法名与参数类型与父类相同时,已经是重写了,这时候如果返回类型或者异常类型比父类大,或者访问权限比父类小都会编译错误

编辑于 2017-11-25 13:47:52 回复(29)
public void foo(){}      方法名相同,返回值不同-->不是重写;而参数列表与父类相同,那么也不是重载。
public int foo(){return 1;}    方法名相同,返回值不同-->不是重写;而参数列表与父类相同,那么也不是重载。
public A foo(B b){return b;}    方法名相同,返回值(无所谓),而参数列表与父类不相同,那么是重载。另:B是A的子类,根据里氏替换原则/自动向上转型,可以这个选项正确。
public A foo(){return A;}    方法名相同,返回值相同,而参数列表也与父类相同,那么也不是重载。
编辑于 2018-08-22 20:37:26 回复(18)
C 选项 重载了父类集成的foo方法。C 正确
A 选项 若是重写,返回值类型不可小于父类返回值类型;若是重载需参数列表不同。A 错误。
B 选项 同上。
D 选项 返回值中A未定义,编译错误。D错误。
发表于 2017-05-23 16:33:39 回复(17)
咋没看到题目哪里说了要重载或重写。。。。= =
编辑于 2018-09-01 21:37:33 回复(5)
C选项并没有重写foo方法,只不过是C类里与父类同名的foo方法。重写首先必须确保方法名、参数列表相同,返回类型要么相同要么是其子类,访问权限≥重写前,异常≤重写前。
发表于 2017-08-04 17:21:07 回复(0)
 D选项的A没有定义,所以报错了!
在继承中也可能会在子类覆盖父类中的方法,在覆盖要注意以下的几点:

1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;

2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;

3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;

4、被覆盖的方法不能为 private ,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖

编辑于 2017-05-20 09:15:45 回复(0)
重写:是继承关系中,重点在于修改基类方法!由于子类继承夫类所有方法,为了使运行时父类可以声明调用,此时 方法名,返回值,参数必须相同,否则父类不知道是否是自己的方法,异常信息 修饰符 同理自己想! 重载:体现在一个类中,也是一种多态 实现目的是为了,提供不同服务方式,所以参数一定不能想同,如果相同没有意义!其他的 修饰符,返回类型,异常 不是我提供多服务的目的
发表于 2018-06-01 10:27:28 回复(3)
覆盖(重写)方法时,参数列表要一样的吧!但是,C不是重写方法,而是重载!子类默认会继承父类的所有方法=====================================mark:重写方法时的两小两同一大,返回类型要小/等,抛出异常要小,方法名同,返回类型同,访问权限大 (小:子类,对基本类型无子类可说,只能等,大就是public>private)。
编辑于 2017-10-23 19:32:44 回复(2)
需要覆盖父类的foo方法,所以A,B都不对,然后D的A对象没有定义,C是对的
发表于 2017-06-05 18:51:24 回复(4)
关于方法的重载和重写的区别:
重载:在一个类中,一个方法执行不同的功能。方法的参数必须不同(参数个数或参数类型),返回值不要求。例子:一个求面积的方法,利用重载实现分别求三角形和正方形的面积。
重写:子类继承父类。重写父类的方法。发生方法重写的两个方法返回值、方法名、参数列表必须完全一致(子类重写父类的方法)。 子类方法的返回值必须和父类方法的返回值相同或是其子类。
编辑于 2017-06-13 20:38:49 回复(2)
本体答案:C
预备知识:
重载:方法名相同,形参列表不同(类型、数目、顺序)
重写:方法名相同,形参列表相同,返回类型≤父类返回类型,抛出异常≤父类抛出异常,访问权限≥父类访问权限
解题思路:
首先根据方法名和形参列表判断是重载还是重写
A、B:重写,但是返回类型与父类返回类型没有继承关系,无法比较所以,错误
C:重载,正确
D:重写,返回了一个类,而不是对象,错误
编辑于 2022-05-11 11:26:27 回复(0)

方法重载(overload):
1.必须是同一个类
2方法名(也可以叫函数)一样
3参数类型不一样或参数数量不一样

方法的重写(override)两同两小一大原则:
方法名相同,参数类型相同
子类返回类型小于等于父类方法返回类型,
子类抛出异常小于等于父类方法抛出异常,

子类访问权限大于等于父类方法访问权限

  • A public void foo(){
    方法名,参数类型和父类相同,但是返回类型和父类没有一定的关系,
    既不是重写也不是重载 
    B public int foo(){return 1;}
    和A选项差不多public A foo(){return A;}
    D public A foo(){return A;} 方法名相同,参数类型相同,重写,
    但是返回类型大于父类类型
    
    
    C public A foo(B b){return b;}
    方法名相同,参数类型不相同,重载 


编辑于 2020-10-12 11:00:55 回复(0)



编辑于 2023-05-27 15:21:51 回复(0)
重载通常是发生在一个类中的,但是也可以发生在子类与父类之间,重载之后其实就是两个方法了,只不过名字一样就是了。。。这道题里面只有将C当成重载才对,其他选项由于参数列表都与父类相同,所以只能是重写,但又都不符合重写条件。
发表于 2019-03-13 17:06:04 回复(0)
D 选项: public A foo(){return new A()};
发表于 2022-03-19 15:42:55 回复(0)
方法的重写(override)两同两小一大原则: 
方法名相同,参数类型(参数列表)相同 
子类返回类型小于等于父类方法返回类型, 
子类抛出异常小于等于父类方法抛出异常, 
子类访问权限大于等于父类方法访问权限。
发表于 2020-05-30 17:30:56 回复(0)
首先四个选项方法名和父类方法的方法名相同,要么重载,要么重写,否则就会报错。
A 选项 若是重写,返回值类型不可小于父类返回值类型;若是重载需参数列表不同。A 错误。
B 选项 同上。
D 选项 返回值中A未定义,编译错误。D错误。
选C
发表于 2018-11-25 20:31:16 回复(0)
C正确,是子类对父类方法的重载(overload)。
之前我记忆的知识点中,重载只发生在同一个类中的不同方法上,重写才是父类与子类之间的关系。
但是做了这道题,我才意识到,父类与子类之间也会发生重载,解释起来也比较简单,子类继承父类,就会继承父类的方法,如果在子类中以重载的形式写另外一个同名不同参的方法,那么就是对继承的父类方法的重载了。
发表于 2018-02-28 09:01:42 回复(0)
与父类有相同的方法名,不是重写就是重载,又因为参数相同,所以时重载,重载要求返回值类型也要相同,所以AB都是错误的。
选项D,A类型没有new出来不能直接返回。
发表于 2023-08-04 21:00:59 回复(0)
重写 要求两同两小一大原则, 方法名相同,参数类型相同,子类返回类型小于等于父类方法返回类型, 子类抛出异常小于等于父类方法抛出异常, 子类访问权限大于等于父类方法访问权限。[注意:这里的返回类型必须要在有继承关系的前提下比较] 重载 方法名必须相同,参数类型必须不同,包括但不限于一项,参数数目,参数类型,参数顺序 再来说说这道题 A B 都是方法名和参数相同,是重写,但是返回类型没与父类返回类型有继承关系,错误 D 返回一个类错误 c的参数类型与父类不同,所以不是重写,可以理解为广义上的重载访问权限小于父类,都会显示错误 虽然题目没点明一定要重载或者重写,但是当你的方法名与参数类型与父类相同时,已经是重写了,这时候如果返回类型或者异常类型比父类大,或者访问权限比父类小都会编译错误C 选项 重载了父类集成的foo方法。C 正确 A 选项 若是重写,返回值类型不可小于父类返回值类型;若是重载需参数列表不同。A 错误。 B 选项 同上。 D 选项 返回值中A未定义,编译错误。D错误。
编辑于 2022-10-20 13:51:35 回复(0)