我正在使用这些课程:
克兰特类
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更具实用性,并且散发出不良气息:在那个地方,额外的信息太具体了。