我问这个问题是因为Collection
我看到它Arrays.sort()
被重载了,所以我想知道当静态方法在类加载时加载并且在类加载时间之后执行重载时,有人怎么能说静态方法被重载。
我的主要问题是:在类加载时间之后执行重载和覆盖;这就是为什么它们对对象可见而对静态部分不可见的原因。那么静态方法可以重载吗?
我问这个问题是因为Collection
我看到它Arrays.sort()
被重载了,所以我想知道当静态方法在类加载时加载并且在类加载时间之后执行重载时,有人怎么能说静态方法被重载。
我的主要问题是:在类加载时间之后执行重载和覆盖;这就是为什么它们对对象可见而对静态部分不可见的原因。那么静态方法可以重载吗?
编译时间和类加载时间不是一回事。并且运行时间(在我在下面使用这个术语的意义上......)又是不同的东西。
重载分析在编译时执行,对于static
实例方法调用。static
对于一种方法遮蔽另一种方法的情况也是如此static
——它在编译时解决。
覆盖调度(例如方法)发生在运行时;即当方法调用实际发生时,取决于作为“目标”对象的实际对象。
为什么 Arrays.sort() 被重载,当它是静态的
为什么不应该呢?
正如我所说,static
实例方法和实例方法都可以重载。(覆盖仅限于实例方法,并且仅限于实例方法......但重载可以用于各种方法,也可以用于构造函数。)
“加载”和“重载”也是完全不相关的概念。“加载”是关于将类(在这种情况下)放入内存,但“重载”是关于具有相同名称的不同签名的不同方法。
静态和动态多态都是多态的一部分。
在静态多态中,重载在编译时解决,在动态中,它在运行时解决。尽管如此,两者都是有效的重载情况。