技术咨询:判断给定代码属于重载(overloading)还是重写(overriding)
这既不是合法的重载,也不属于重写
嘿,咱们先把重载和重写的核心规则理清楚,再拆解这个例子:
先明确两个概念的核心区别
- 重载(Overloading):必须发生在同一个类中,函数名相同,但参数列表(参数的类型、数量、顺序)必须存在差异。划重点:返回值类型不参与重载的判定——就算返回值不一样,只要参数列表完全相同,就不算合法的重载。
- 重写(Overriding):是子类与父类之间的行为——子类重新实现父类中已有的方法,要求参数列表必须完全一致,返回值要么和父类方法相同,要么是父类返回值的子类(协变返回值),同时还要满足访问修饰符、异常抛出等配套规则。
回到你的代码例子
你给出的两个函数定义:
int a(int n1, int n2); float a(int n1, int n2);
它们的参数列表完全一致(都是两个int类型参数),仅返回值不同。在Java、C++这类静态类型语言中,这样的写法是语法错误——编译器根本无法通过调用上下文判断你要执行哪个版本的函数(比如写a(1,2);时,编译器没法确定该返回int还是float)。
另外,这段代码也没有涉及父类子类的继承关系,完全和重写的适用场景不沾边。
总结一下:这两行代码既不是合法的重载,也不属于重写,它们本身就是不符合语法规则的函数定义。
内容的提问来源于stack exchange,提问作者Arvind Gupta
相关产品推荐
相关产品推荐

