簡體   English   中英

在java中將抽象類作為參數傳遞

[英]Passing abstract class as parameter in java

我以為我之前做過這個,也許是在C ++中。 情況就是這樣。

public abstract class SuperClass
{
   public methodname ( SuperClass superc )
   {
      // do stuff
   }
}

public class SubClass extends SuperClass
{
}

如果我這樣稱呼,我會收到錯誤

SubClass subc1 = new SubClass();
SubClass subc2 = new SubClass();

subc1.methodname ( subc2 );

它告訴我沒有名為“methodname(SubClass)”的方法。 它不想使用SubClass的SuperClass部分並將其在參數中傳遞給“methodname(SuperClass)”。 但是,如果我刪除“abstract”關鍵字,則沒有問題。

java允許在參數中傳遞抽象類嗎?

您的方法缺少返回類型,一旦我修復了代碼的錯誤:

public class Foo {
    public static void main(String[] args) {
        SubClass subc1 = new SubClass();
        SubClass subc2 = new SubClass();
        subc1.methodname ( subc2 );
    }
}

abstract class SuperClass
{
   public void methodname ( SuperClass superc )
   {
      System.out.println("do stuff");
   }
}

class SubClass extends SuperClass
{
}

超類和子類非公開,所以我可以把所有東西都塞進一個文件中。 我假設你在不同的文件中有這些類,因為超類和子類都是公共的。 當我編譯並運行它時:

C:\Users\ndh>%JAVA_HOME%\bin\javac Foo.java

C:\Users\ndh>java Foo
do stuff

它工作正常。

當我第一次編譯原始代碼時,我收到了這個錯誤:

C:\Users\ndh>%JAVA_HOME%\bin\javac Foo.java
Foo.java:12: error: invalid method declaration; return type required
   public methodname ( SuperClass superc )
          ^
1 error

所有方法都必須具有返回類型。 構造函數沒有返回類型,但它們必須與類相同,因此不應該有歧義。 javac正確地找出了問題所在。

也許你正在使用一個產生不太清晰的錯誤信息的IDE?

暫無
暫無

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

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