子类重载父类???

今天在牛客网刷到一题,如下:

链接:https://www.nowcoder.com/questionTerminal/3f4af0f48392470c9493493741be0897
来源:牛客网
 

对于如下代码段

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 答案:因为返回类型不同,所以不是重写。然后又重载分析,重载需要参数列表中 参数顺序,类型,个数其中某一条件不一样,但是都没有所以A,B排除 。

经过验证A,B报错为: B,C包中foo()方法冲突,attempting to use incompatible return type

 

根据大佬们的意见A,B排除的前提是子类可以重载父类这一条件,C答案满足于是选C。

可是我感觉这种说法有点问题,于是又看见一个大佬说,这不应该算重载,这只是父类自己定义的一个方法,于是选C。

这位大佬的问题在于看着答案分析,照这逻辑A,B也可以选吧。

last but not least,我认为这就是子类对父类重载,可以这么理解子类继承了父类所有的方法,在这些方法上再对子类进行重载。。。

 

 

你可能感兴趣的:(问题)