Java - getter 来自对象属性

Java - getter from a object attribute

我正在使用这些 classes:

class克兰特

public class Klant {

    private String naam;
    private String adres;
    private String geboortedatum;
    private double gewicht;
    private int bmi;

    private Abbonement abbonement;

    public Klant(String naam, String adres, String geboortedatum, double gewicht, int bmi, Abbonement abbonement){
        this.naam = naam;
        this.adres = adres;
        this.geboortedatum = geboortedatum;
        this.gewicht = gewicht;
        this.bmi = bmi;
        this.abbonement = abbonement;
    }

    public Abbonement getAbbonement() {
        return abbonement;
    }
}

class 遗弃

public abstract class Abbonement {

    private String begindatum;
    private int contractduur;
    private double maandprijs;

    Abbonement(String begindatum, int contractduur, double maandprijs){
        this.begindatum = begindatum;
        this.contractduur = contractduur;
        this.maandprijs = maandprijs;
    }
}

class米隆

public class Milon extends Abbonement{

    private int niveau;

    public Milon(String begindatum, int contractduur, double maandprijs, int niveau){
        super(begindatum, contractduur, maandprijs);
        if(niveau >= 1 && niveau <= 25) {
            this.niveau = niveau;
        } else {
            this.niveau = 1;
        }
    }

    public int getNiveau() {
        return niveau;
    }
}

现在我有一个带有 Milon 订阅的 Klant 对象。目前我无法检索他们订阅的 niveau。

第一个想法是:

piet.getAbbonement().getNiveau()

但它不起作用可能是因为我认为它来自抽象 class?

现在我的问题是,如果它在 Klant 对象中被遗弃,我如何从 Milon 中 return niveau?

您可以尝试类似的操作:

Abbonement abbonement;
int niveau;

abbonement = myKlant.getAbbonement();

if (abbonement instanceof Milon) {
    Milon milon;
    milon = (Milon)abbonement;
    niveau = milon.getNiveau();
} else { 
    niveau = 0; 
}

如果属性比较笼统,貌似是这样,把它带到基地class。

public abstract class Abbonement {
    public int getNiveau() {
        return 0;
    }
    ...

public class Milon extends Abbonement{

    @Override
    public int getNiveau() {
        return niveau;
    }
}

通常在基础 class 中会有一个方法,在 Milon 中被覆盖以对 niveau 和可能的其他字段做一些事情。说是为了显示有关 Abbonement 的信息。或者压缩业务逻辑的东西 Abonnement.isGoedNiveau().

将 Abbonement 施放给 Milon 是一种更实用的 hack,并且风格不佳:在那个地方,额外的信息太具体了。