具有两个构造函数的类,将不同的对象作为父项

时间:2017-06-08 09:12:15

标签: java processing

我想创建一个新类,它必须能够采用两种不同类型的对象(具有几乎相同的函数和变量)。我试图使用两个构造函数。由于两个可能的参数类中都包含几乎相同的变量,因此我希望使用名为parent的相同变量来引用它们。

我尝试了什么:

class Segment{
  float phi;
  float theta;
  float len;
  Base parent;
  Segment parent;

  public Segment(Base parent, float len, float phi, float theta) {
    this.len = len;
    this.phi = phi;
    this.theta = theta;

    this.parent = parent;
  }

  public Segment(Segment parent, float len, float phi, float theta) {
    this.len = len;
    this.phi = phi;
    this.theta = theta;

    this.parent = parent;
  }

  // ... functions calling parent.variableName 
}

这是不可能的,因为父母是重复的,什么是解决这个问题的方法?

修改

SegmentBase唯一的共同点是一些变量告诉起点终点,将新段连接到。 除此之外,基地停滞不前,而且细分市场正在移动

3 个答案:

答案 0 :(得分:3)

执行此操作的方法是为两个类创建一个公共超类:

public abstract class Super {
    // Here you declare all fields and methods that your classes have in common.
}

public final class Base extends Super { ... }
public final class Segment extends Super { ... }

然后你的班级看起来像这样:

public final class YourClass {
    ...
    private final Super parent; // only once
    public YourClass(Super parent, ...) {
        ...
        this.parent = parent;
    }
}

也就是说,你只有一个构造函数和一个引用超类的字段。

答案 1 :(得分:1)

让base和segment实现相同的接口。现在将父类型更改为该接口(并删除其他父字段)

答案 2 :(得分:-1)

你有几种方法可以做:

  1. 声明父对象是对象父对象;然后根据需要施放它。它非常简单,但并不好。

  2. 通过定义基类/接口来使用继承,如下面的2个答案。如果它们具有相同的属性和方法,我更喜欢接口。否则,请使用class。

  3. 使用Segment或Segment等通用