Loaded constructor与Overloaded constructor的核心差异及易混淆点咨询
loaded constructor 与 overloaded constructor 的核心差异
首先先明确两个术语的定义边界:
- 你对
loaded constructor的理解是对的,这个术语并不是面向对象编程领域的官方标准术语,更多是部分地区/部分开发者对带参数的构造函数的口语化称呼,官方标准语境下对应的概念是parameterized constructor(参数化构造函数),核心判定标准就是构造函数定义时携带参数列表,和它对应的是无参的默认构造函数。 overloaded constructor(重载构造函数)是官方标准术语,指的是同一个类中定义的、参数列表(参数个数、类型、排列顺序)互不相同的多个构造函数,是函数重载特性在构造函数场景下的应用,核心判定标准是该构造函数和同一类下的其他构造函数构成重载关系。
二者本质上是完全不同维度的分类,不存在非此即彼的互斥关系,差异可以总结为以下两点:
- 分类依据完全不同
loaded constructor 是按照「构造函数是否携带参数」的维度做的分类,和它并列的分类是无参构造函数;overloaded constructor 是按照「构造函数是否属于同一类下的多构造函数重载集合」的维度做的分类,只要和类内其他构造函数参数列表不同,哪怕是无参构造,也属于重载构造函数。 - 判定条件互不绑定
举个简单的代码示例更易理解:
上面的示例中:public class User { // 无参构造 public User() {} // 仅携带用户名参数的构造 public User(String username) {} // 携带用户名、年龄两个参数的构造 public User(String username, int age) {} }- 后两个带参数的构造函数属于 loaded constructor,第一个无参构造不属于
- 三个构造函数全部属于 overloaded constructor,因为三者彼此构成重载关系
另外还有一个典型的边界场景:如果一个类里只定义了唯一一个带参构造函数,没有其他构造函数,那它只是 loaded constructor,不属于 overloaded constructor,因为没有其他构造函数和它构成重载关系。
内容的提问来源于stack exchange,提问作者Man Hei Li
相关产品推荐
相关产品推荐

