簡體   English   中英

使用子類和超類引用訪問實例方法

[英]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)

編輯和更新:

一些答案指出SubClassSuperClass繼承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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM