簡體   English   中英

您可以從一個單獨的類中調用該類中的方法嗎,該類將所述SuperClass的子類作為對象?

[英]Can you call a method in the SuperClass from a separate class that has the SubClass of said SuperClass as an object?

此SubClass重寫了原始方法,而SuperClass是抽象類。 是否可以通過初始化為子類的對象來調用SuperClass中的原始方法?

public class SubClass extends SuperClass {
    public void methodA() {
        System.out.println("SubClass: methodA");
    }

    public void methodB(int num) {
        System.out.println("SubClass: methodB " + ++num);
    }
}

public abstract class SuperClass {
    public void methodA() {
        System.out.println("SuperClass: methodA");
    }

    public void methodB(int num) {
        System.out.println("SuperClass: methodB " + num);
    }
}

我要做什么:

{
  public static void main(String args[]){
    SuperClass sup= new SuperClass();
    sup.methodA();
}

我認識到上面的代碼無法作為抽象類工作,因此我想這樣做:

{public static void main(String args[]){
    SuperClass sup= new SubClass();
    sup.methodA(); //Trying to call method in original superclass
}

您始終可以創建擴展Super的匿名類或不會覆蓋methodA()的子類。 這是前一種方法的示例:

    SuperClass sup= new SuperClass(){};
    sup.methodA();

不,您不能“從外面”那樣做。

這就是多態性的全部目的/思想-確切的調用方法僅取決於調用該方法的對象的類。

換句話說:您必須退后一步並修復設計。 如果要調用基類方法,則需要一個基類對象-而不是子類!

含義:沒有容易解決的方法。 相反,您應該仔細檢查您的需求,然后提出一個可幫助您實現這些需求的類層次結構。

我同意tsolakp概述的解決方案是行得通的-但請不要誤解:它不過是解決症狀的(骯臟的)創可貼。 您最好將時間花費在解決根本的原因上,這是由於oo設計的缺陷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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