簡體   English   中英

具有兩個構造函數的類,將不同的對象作為父項

[英]Class with two constructors taking different objects as parents

我想創建一個新類,它必須能夠采用兩種不同類型的對象(具有幾乎相同的函數和變量)。 我試圖使用兩個構造函數。 由於兩個可能的參數類中都有幾乎相同的變量,我想用同一個名為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唯一的共同點是一些變量告訴起始端點,將新的Segments連接到。 除此之外,基地靜止不動,而且分部正在移動

OO方法是為兩個類創建一個公共超類:

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;
    }
}

也就是說,您只有一個構造函數和一個引用超類的字段。

讓base和segment實現相同的接口。 現在將父類型更改為該接口(並刪除其他父字段)

你有一些方法可以做:

  1. 聲明父對象是Object:Object parent; 然后根據需要施放它。 這很簡單但不好。

  2. 通過定義基類/接口來使用繼承,如下面的2個答案。 如果它們具有相同的屬性和方法,我更喜歡接口。 否則,請使用課程。

  3. 使用Segment或Segment等通用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM