yunyuntop
2017-07-24 04:35
采纳率: 80%
浏览 1.6k
已采纳

这次改好了,这个子类为什么可以重载父类方法

我发现子类其实可以重载父类方法
class S{
public int print(int a){
System.out.println("父");
return 1;
}
}
class D extends S{
public int print() {
System.out.println("子");
return 1;
}

}这个如果把返回值改成别的参数相同就会出错,我觉得是编译器认为是重写,但是如果
参数不同编译器就认为是重载了,但是重载还不符合定义,那这个属于什么,之前百度过有说这个是重构的,但是重构是什么

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • 战在春秋 2017-07-24 05:32
    已采纳

    1 不是重写,重写方法必须和被重写方法具有相同的参数列表,且返回类型必须和被重写方法的返回类型相同或者是返回类型的子类型。
    题目中不满足第一条:父类print方法参数为int类型,子类print方法为无参函数。

    2 不是重载,重载的概念是在 **同一层级** 中定义名字相同的函数,父类和子类的函数之间不存在重载。

    结论:就是两个方法,一个定义在父类,一个定义在子类,只是恰好名字相同而已。

    如果对您有帮助,请采纳答案好吗,谢谢!

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • private_abstact 2017-07-24 05:43

    不太理解你的意思,如果你是重写的话,改返回值就得改为与父类返回值类型相兼容的类型

    评论
    解决 无用
    打赏 举报
  • SonOfWind0311 2017-07-24 05:54

    我想你纠结的应该是overload和override的区别:
    overload:同一个类中,相同名称的函数,参数不同(参数个数or参数类型or参数顺序)
    override:子类覆盖父类的函数,函数名称相同,参数相同;

    需要说明的是函数返回值:
    a 同一个类中,相同名称的函数,如果参数相同,仅仅返回值不同,编译会报错,会认为重复定义相同的函数,
    因为在Java中判断函数是否冲突不会判断返回类型
    b 在子类覆盖父类的函数时,不能修改返回值类型

    评论
    解决 无用
    打赏 举报
  • cloudyzhao 2017-07-24 06:06

    重载是指同一个类中参数不同的方法
    重写是子类重写父类的方法 其中作用域 返回值 参数个数和类型必须相同
    谢谢

    评论
    解决 无用
    打赏 举报
  • xiaolin_wxl 2017-07-24 09:11

    重写与重载的区别他们说的够清楚了,我就不说了
    我认为这就是重载啊,很明确,子类继承了父类的有参的print方法,那么子类就有一个有参的print方法
    子类再写一个无参的print()方法,方法名相同,参数列表不同,不就是重载么??
    你方法名相同,参数列表也相同,只是改动返回值类型,这就不符合重载的特性了,他是肯定会报错的啊。

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题