[英]Using methods from a subclass on an object that is an instance of the superclass
[英]Accessing instance methods using subclass and superclass references
这是示例代码:
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)在编译时不起作用(这就是我将其注释掉的原因)。 它不起作用,因为superClassRef
不知道someMethod()
,因为它是SuperClass
类型并且SuperClass
没有定义someMethod()
。
我的问题是(2)为什么/如何在编译时工作? 使用与上面相同的解释,在编译时, subClassRef
也不知道someMethod(int)
,因为它是SubClass
类型并且SubClass
没有定义someMethod(int)
。
编辑和更新:
一些答案指出SubClass
从SuperClass
继承someMethod(int)
。 这是正确的,我理解; 我的后续问题是编译器如何考虑继承关系?
Yes someMethod(int)
is defined in parent class which is SuperClass
, but when child class inherits parents class using extends
keyword then subclass inherits all of the public and protected members of its parent and can use them directly, which is called Inheritance
子类继承其父类的所有公共和受保护成员,无论子类在哪个 package 中。如果子类与其父类在同一个 package 中,它还继承父类的包私有成员。 您可以按原样使用继承的成员、替换它们、隐藏它们或用新成员补充它们:
这是因为 SubClass 继承了 someMethod(int) 并且有 someMethod(),所以它有两个不同的方法。 SuperClass 无法访问 someMethod() 因为它没有扩展任何类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.