在java中将抽象类作为参数传递

时间:2015-05-10 02:18:16

标签: java inheritance abstract

我以为我之前做过这个,也许是在C ++中。情况就是这样。

var costMonthlyArray=[];
 var query = new Parse.Query(Services);
        query.exists("costMonthly");
        query.find({
            success: function (results) {
                for (var i = 0; i < results.length; i++) {
                    var object = results[i];
                    var cost=object.get('costMonthly');
                    costMonthlyArray.push(cost);
                    console.log(cost);
                }
            },
            error: function (error) {
                alert("Error: " + error.code + " " + error.message);
            }
        });

如果我这样称呼,我会收到错误

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

public class SubClass extends SuperClass
{
}

它告诉我没有名为&#34; methodname(SubClass)&#34;的方法。它不想使用SubClass的SuperClass部分并将其传递给&#34; methodname(SuperClass)&#34;。但是,如果我删除&#34;摘要&#34;关键字,没有问题。

java允许在参数中传递抽象类吗?

1 个答案:

答案 0 :(得分:3)

一旦我修复了代码的错误,你的方法就缺少一个返回类型:

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?