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