Java中构造函数链接是按引用传递的,并且转换如何对其产生影响?

时间:2018-09-29 18:12:55

标签: java polymorphism

假设我在一个类中有三个构造函数:

public class MyClass {
    Parent thingA;
    Child thingB;
    boolean someBoolean;
    double someDouble;
    double anotherDouble;

    public MyClass(Parent thingA, boolean someBoolean) {
       this(thingA, someBoolean, 0.25);
    }

    public MyClass(Child thingB, boolean someBoolean, double anotherDouble) {
       // Casting to prevent recursive constructor call
       this((Parent) thingB, someBoolean, 0.5);
       this.thingB = thingB;
       this.anotherDouble = anotherDouble;
    }

    public MyClass(Parent thingA, boolean someBoolean, double someDouble) {
       this.thingA = thingA;
       this.someBoolean = someBoolean;
       this.someDouble = someDouble;
    }  
}

Child扩展Parent的位置。我的问题是,当我通过this(...)从Java中的构造函数调用另一个构造函数时,我是按引用传递还是按值传递?投射如何影响它?如果我要使用第二个构造函数并修改ThingB的属性,那会反映在ThingA中吗?

编辑:我同时拥有thingA和thingB字段,因为有时我的类将在没有Child实例的情况下使用,但是当使用Child时,我需要利用{{ 1}}。

1 个答案:

答案 0 :(得分:-2)

在Java中,所有对象(非基本类型)均通过引用传递。投射对此行为没有影响。如果这不是您想要的,则可以创建对象的副本(您需要自己实现此行为,通常以方法或构造函数的形式实现),然后传递该副本。