使用子类和超类引用访问实例方法

时间:2019-10-26 20:08:23

标签: java inheritance

这是示例代码:

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没有定义SuperClasssomeMethod()不为someMethod(int)所知。

我的问题是(2)为什么然后在编译时如何工作?使用与上述相同的解释,在编译时subClassRef也不知道SubClass,因为它的类型为SubClass,而someMethod(int)没有定义SubClass

编辑和更新:

一些答案​​指出,someMethod(int)SuperClass继承了candidates = { "name": [ [ {"tag": "id", "pattern": "(.+)"}, ], ], } 。没错,我了解;我的后续问题是编译器如何能够考虑继承关系?

2 个答案:

答案 0 :(得分:1)

someMethod(int)是在父类SuperClass中定义的,但是当子类使用extends关键字继承父类时,子类将继承其父类的所有公共成员和受保护成员,并且可以直接使用它们,称为Inheritance

  

子类继承其父级的所有公共成员和受保护成员,无论该子类位于哪个包中。如果该子类与其父级位于同一包中,则它还将继承父级的包私有成员。您可以按原样使用继承的成员,替换它们,隐藏它们,或用新成员补充它们:

  • 继承的方法可以直接使用。

答案 1 :(得分:1)

这是因为SubClass继承了someMethod(int)并具有someMethod(),因此它具有两种不同的方法。 SuperClass无法访问someMethod(),因为它没有扩展任何类。

相关问题