为什么我不能在类构造函数中传递同一个类的实例?

时间:2015-10-16 15:24:59

标签: java

public Fraction (int a1 , int b1)   {
    a = a1;
    b = b1;
}

Fraction fr = new Fraction (new  Fraction(1,1), new Fraction(2,2)    )

有没有办法让这项工作?

3 个答案:

答案 0 :(得分:6)

  

可以像[...]

一样调用这个[...]

当然不是。 Java是一种静态类型语言,此构造函数需要int种类型:

public Fraction (int a1 , int b1)

但是,在此行中,您为其提供了Fraction种类型:

new Fraction (new Fraction(1,1), new Fraction(2,2))

由于编译器告诉你的原因,它不会起作用。 Fraction上没有与指定参数类型匹配的构造函数。

(该行上的两个内部构造函数调用将起作用。外部一个是失败的那个。)

  

有没有办法让这项工作?

取决于你如何定义构造函数你可以在你的类中定义两个构造函数:

public Fraction (int a1 , int b1)
{
    // ...
}

public Fraction (Fraction a1 , Fraction b1)
{
    // ...
}

然后,您可以使用任一构造函数构造Fraction对象的实例,这将使该行有效。你在第二个构造函数中做的做什么取决于你。

答案 1 :(得分:3)

要使其工作,请再创建一个接受两个Fraction参数的重载构造函数:

public Fraction(Fraction f1, Fraction f2) {
    this(f1.a*f2.b, f1.b*f2.a); 
}

答案 2 :(得分:2)

只有在编写2重载的构造函数时才可能:

public Fraction (int a1 , int b1)

public Fraction (Fraction f1 , Fraction f2)