这是示例代码:
package com.ankur.javapractice;
public class SuperClass {
public void someMethod(int val) {
System.out.println("Public method in SuperClass");
}
}
class SubClass extends SuperClass {
public void someMethod() {
System.out.println("Public method in SubClass");
}
public static void main(String[] args) throws InterruptedException {
SuperClass superClassRef = new SubClass();
SubClass subClassRef = new SubClass();
//superClassRef.someMethod(); // (1)
subClassRef.someMethod(8); // (2)
}
}
我知道为什么(1)在编译时不起作用(这就是为什么我将其注释掉了)。它不起作用someMethod()
是superClassRef
因为它是类型的SuperClass
,SuperClass
并且没有定义,因此不为人知someMethod()
。
我的问题是(2)在编译时为何/如何工作?使用相同的解释如上述,在编译时,someMethod(int)
也没有已知的subClassRef
,因为它是类型的SubClass
和SubClass
没有定义someMethod(int)
。
编辑和更新:
一些答案指出SubClass
继承someMethod(int)
自SuperClass
。没错,我理解;我对此的后续问题是,编译器如何考虑继承关系?
这是因为SubClass继承了someMethod(int)并具有someMethod(),因此它具有两种不同的方法。SuperClass无法访问someMethod(),因为它没有扩展任何类。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句