【问题标题】:java reason: actual and formal argument lists differ in lengthjava原因:实际参数列表和形式参数列表的长度不同
【发布时间】:2017-06-08 15:33:43
【问题描述】:

我需要帮助为我的代码创建一个 setter 方法。我为我的两个字符串值创建了两个 setter 方法,但我 A) 不确定它们是否正确实现,B) 不确定如何调用它们以便它们出现在屏幕上。本质上,我希望能够只调用我的狮子和河马类,并让它们已经有了名称和大小,而不必通过插入类似的东西直接在我的主函数中实现它们 河马 h = new Hippo("汤姆", "42")

package game2;


public class Game2 {

    public static void main(String[] args) {
        //I am getting the error here, what I want to do is figure out how to 
        //get this to work and then declare a name and size for the animal
        Hippo h = new Hippo();
        Lion l = new Lion(); 
    }

}

package game2;

public abstract class Animal {
    private String name;
    private String Size; 

    public String getName() {
        return name; 
    }

    public String getSize() {
        return Size; 
    }

    public void setName(String name) {
        name = "Tom"; 
    }

    public void setSize(String name) {
        name = "42"; 
    }


    public Animal(String theName, String theSize) {
        name = theName; 
        Size = theSize; 
    }
 }

package game2;

public class Hippo extends Animal {

    public Hippo(String name, String Size) {
        super(name, Size);
    }
}

package game2;

public class Lion extends Animal{

    public Lion(String name, String Size) {
        super(name, Size);
    }
}    

【问题讨论】:

  • 请显示编译错误
  • 如果您查看您的构造函数,您会发现他们期望 namesize - 当您调用它们时,您没有提供它们。你应该这样做Lion l = new Lion("Leo", "XXL");
  • 错误信息是清晰明了的英文,怎么会不清楚呢?它也被多次回答,所以即使是一点点研究也会有所帮助。写“Java 新手”不是忽略错误消息和不惜一切代价避免自己研究的借口。

标签: java


【解决方案1】:

请记住,当您自己实现构造函数时,您会重载默认构造函数。所以你需要传递两个参数。

实例化时没有为构造函数传递参数:

Hippo h = new Hippo();
Lion l = new Lion(); 

因为您的类构造函数需要两个参数。

public Hippo(String name, String Size) {
    super(name, Size);
}

还有:

public Lion(String name, String Size) {
    super(name, Size);
}

解决方案:

您可以在实例化对象时传递参数:

Hippo h = new Hippo("name", "33");
Lion l = new Lion("name", "22"); 

或者你需要为这些实现重载的构造函数。

阅读this to learn more about constructor overloading

【讨论】:

    【解决方案2】:

    您的代码未编译,因为您没有使用正确的构造函数, Hippo 和 Lion 的构造函数都需要两个字符串参数,因此您必须执行以下操作:

    Hippo h = new Hippo("myHippo", "220");
    Lion l = new Lion("Simba", "400");
    

    【讨论】:

      【解决方案3】:

      new Hippo()/Lion() 正在调用一个你没有的函数(空构造函数)

      你有函数 Hippo(String name, String Size) 需要 2 个参数

      试试新的 Hippo("Billy", "10")

      【讨论】:

        【解决方案4】:

        HippoLion 的构造函数都需要两个字符串参数 - 名称和大小。您需要在调用相应的构造函数时传递它们。例如:

        Hippo h = new Hippo("Happy", "Huge");
        Lion l = new Lion("Leo", "Big"); 
        

        【讨论】:

        • 好吧,这很好用,但现在我想弄清楚如何使用我的 set 方法并设置动物的大小和名称,而不必在 main 函数中声明它,但在动物内部班级。有什么建议吗?
        • @Connor.Littleton 我不明白这个问题。你能分享一个你希望你的代码是什么样子的例子吗?
        • @sweeper 是的,这回答了我的问题,非常感谢!你怎么称呼它里面的main tho?只需打印出河马对象?
        【解决方案5】:

        如果您想在创建动物后决定名称和大小,则需要一个无参数构造函数。目前所有的构造函数都要求你传递 2 个参数。所以写一个!

        这是一个例子:

        public Hippo() {
            setSize(insert default size here);
            setName(insert default name here);
        
        }
        

        然后,您可以像这样创建河马:

        Hippo hippo = new Hippo();
        hippo.setName("Tom");
        

        【讨论】:

          猜你喜欢
          • 2014-04-06
          • 2019-08-10
          • 1970-01-01
          • 2014-05-13
          • 2023-03-25
          • 1970-01-01
          • 2016-05-31
          • 2018-05-08
          • 2013-10-04
          相关资源
          最近更新 更多