我正在使用这些课程:

克兰特类

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


类退房

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


米隆班

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


现在,我有一个带有Klant订阅的Milon对象。目前,我一直在检索他们订阅的内容。

首先想到的是:

piet.getAbbonement().getNiveau()


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

现在,我的问题是,如果Milon对象中的niveau被放弃,我该如何从Klant返回niveau?

最佳答案

如果该属性相当通用(似乎是这种情况),请将其带到基类。

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

public class Milon extends Abbonement{

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


通常,在基类中会有一个方法,该方法在Milon中被重写以对niveau以及可能的其他字段进行处理。表示在Abbonement上显示信息。还是一些浓缩业务逻辑Abonnement.isGoedNiveau()的东西。

向Milon投掷Abbonement更具实用性,并且散发出不良气息:在那个地方,额外的信息太具体了。

09-27 03:32