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