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

Java 为什么我不能在类构造函数中传递相同类的实例?,java,Java,有没有办法让这一切顺利进行 这个[…]可以这样称呼吗[…] 当然不是。Java是一种静态类型语言,此构造函数需要int类型: public Fraction (int a1 , int b1) { a = a1; b = b1; } Fraction fr = new Fraction (new Fraction(1,1), new Fraction(2,2) ) public Fraction (int a1 , int b1) 但是,在这一行中,您为它提供了

有没有办法让这一切顺利进行

这个[…]可以这样称呼吗[…]

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

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

Fraction fr = new Fraction (new  Fraction(1,1), new Fraction(2,2)    )
public Fraction (int a1 , int b1)
但是,在这一行中,您为它提供了
Fraction
类型:

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

Fraction fr = new Fraction (new  Fraction(1,1), new Fraction(2,2)    )
public Fraction (int a1 , int b1)
因为编译器告诉您的确切原因,这不起作用。
Fraction
上没有与指定参数类型匹配的构造函数

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

有没有办法让这一切顺利进行

根据定义构造函数的方式,可以在类中定义两个构造函数:

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

然后,您可以使用任一构造函数构造
分数
对象的实例,这将使该行有效。在第二个构造函数中执行的操作取决于您。

若要使其正常工作,请再创建一个重载构造函数,该构造函数接受两个
分数
参数:

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

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

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

公共分数(int a1,int b1)


公共分数(分数f1,分数f2)

当你尝试它时发生了什么?是的,但是你需要一个单独的构造函数,它以2
分数作为参数。你为什么不试试看呢?两个分数中的分数在数学中定义得很好。@laune:那很好。但这与Java构造函数有什么关系呢?我指的是“在第二个构造函数中做什么取决于您”。当然,假设该计划旨在符合普遍接受的原则。-请看下面萨沙的A。@laune OP的代码中没有
公共分数(分数,分数)
构造函数。除非您提供这样的构造函数,否则OP尝试的是无法实现的,尽管它在数学上是可能的。这是大卫的教训。@LuiggiMendoza你在告诉我我知道的事情-有什么意义?如果David写了“你做什么-由你决定”,那么这要么是绝对多余的,要么可能会引起评论。仅此而已——要么接受,要么放弃。