我正在使用这些课程:
班级Klant
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;
}
}
类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;
}
}
类Milon
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
的对象。目前我无法检索他们订阅的niveau。
首先想到的是:
piet.getAbbonement().getNiveau()
但它不起作用可能是因为它来自我认为的抽象类?
现在我的问题是,如果在Milon
对象中出现问题,我如何从Klant
返回niveau?
答案 0 :(得分:1)
你可以尝试类似的东西:
Abbonement abbonement;
int niveau;
abbonement = myKlant.getAbbonement();
if (abbonement instanceof Milon) {
Milon milon;
milon = (Milon)abbonement;
niveau = milon.getNiveau();
} else {
niveau = 0;
}
答案 1 :(得分:1)
如果属性非常普遍,似乎就是这种情况,请将它带到基类。
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更加务实,并且风格很糟糕:在那个地方,额外的信息太具体了。