-1

我正在学习核心java并练习它。我理解方法重载的概念。但是当我运行下面的程序时,它显示错误为“

constructor Methodover in class Methodover cannot be applied to given types;
        Methodover m2 = new Methodover();
                        ^
  required: int,int
  found: no arguments
  reason: actual and formal argument lists differ in length"

请在下面找到我的代码并提供帮助。我只是在学习。

public class Methodover
{   
    int x;
    int y;

     Methodover(int a, int b)
    {
        x=a;
        y=b;
        System.out.println("The values assigned are" +x+ "And" +y);

    }

    void multiply(Methodover obj)
    {   obj.x = 2;
        obj.y = 2;
        System.out.println("The multiplication result with object passed is" +obj.x*obj.y );

    }
    public static void main(String[] args)
    {
        Methodover m1 = new Methodover(5,6);
        Methodover m2 = new Methodover();
        m2.multiply(m1);

    }

}
4

8 回答 8

3

在使用构造函数时,请始终使用默认构造函数以避免运行时异常。在代码中定义默认构造函数..

 Methodover()
 {
      //initialize default values.
      this(0, 0);
 } 
于 2013-05-21T07:04:45.113 回答
2

您尚未在您的课程中定义无参数(无参数)构造函数,这就是您收到错误的原因。默认情况下,为类提供了无参数构造函数,因为您提供了自己的带有两个参数的构造函数,因此您不能再使用默认构造函数。定义一个默认的构造函数,或者调用你拥有的构造函数。

public class Methodover
{   
    int x;
    int y;

     Methodover() //new no-argument (parameter less) constructor
     {
     } 

     Methodover(int a, int b)
    {
        x=a;
        y=b;
        System.out.println("The values assigned are" +x+ "And" +y);

    }
于 2013-05-21T06:59:06.577 回答
2

此类中没有零参数构造函数。每当您编写构造函数时,JVM 都不提供默认构造函数。

当类中没有任何构造函数时,JVM 提供无参数构造函数。

从您的班级开始,您有两个参数构造函数,并且您正在调用零参数构造函数。

为了解决这个问题,还要编写零参数构造函数。

Methodover() {
  //Zero Argument Constructor or No Argument constructor.
}

Methodover(int a, int b) {
    x=a;
    y=b;
    System.out.println("The values assigned are" +x+ "And" +y);
}

这称为构造函数重载。

于 2013-05-21T07:01:30.103 回答
1

如果您使用参数定义自己的构造函数,我会 java。

那么你不能使用默认构造函数(没有参数)而不定义它。

要使用它,您必须手动定义它

这里使用的是 m2 的默认构造函数。. 你还没有定义它

于 2013-05-21T07:01:42.217 回答
1

在类 Methodover 中创建默认构造函数

   Methodover()
   { }

错误是因为您有带有两个参数的参数化构造函数

或者您可以创建如下对象

   Methodover m2 = new Methodover(2,3);
于 2013-05-21T07:01:55.330 回答
1

默认(零参数)构造函数就像在法庭上代表您的律师。如果你没有 - JVM 会为你提供它,但如果你有 - 默认值将不存在:-)和面向对象)

于 2013-05-21T07:07:25.190 回答
1

默认情况下,在 Java 中创建的每个自定义类都将具有无参数构造函数。

现在如果你定义一个带参数的构造函数

public  Methodover(int a, int b)
{
        x=a;
        y=b;
        System.out.println("The values assigned are" +x+ "And" +y);

}

并且不要像下面那样显式定义默认构造函数

public Methodover()
{

}

Java 将采用这一点,构造类对象的唯一方法是通过您创建的唯一参数化构造函数。

因此,您得到的错误。要解决此问题,请显式定义默认构造函数,如其他答案中所述

当您没有明确定义默认构造函数和其他参数化构造函数时,为什么 Java 会取消默认构造函数?

考虑不可变设计模式,这里我们限制用户在构造对象时为其提供值。如果 Java 允许使用默认构造函数,则无法限制用户在创建对象时传递对象的值。

于 2013-05-21T07:08:22.523 回答
-1

您为默认构造函数创建了对象

Methodover m2 = new Methodover();

但是您没有定义默认构造函数。

于 2015-06-09T13:47:48.460 回答