想象一下,我创建了两个关联类(建筑和人)。一个建筑可以容纳 n 人(人),一个人一次只能在一栋楼里。
目前的代码(只是相关部分)是。
public class Building {
//some attributes like name, location...
private List<Person> person;
//constructor
//some methods
}
public class Person {
//some attributes like name, age...
private Building building;
//constructor
//some methods
}
好了,现在我需要更多关于Person的细节 所以我把这个类扩展到另外两个类(医生和父母),它们有自己的方法,其中一些方法是针对每个类的。
这段代码。
public class Parent extends Person {
// some specific attributs
public boolean born;
//constructor
//some methods
public void setChildBorn() {
this.born = true;
}
}
public class Doctor extends Person {
// some specific attributs
// constructor
// some methods
public void maternityWard() {
//HERE THE QUESTION
}
}
所以,一旦到达这里,从 maternityWard
方法,我需要。
setChildBorn()
.一个简单的模式是这样的。
Building < association > Person
/ extends \
Doctor Parent
最后,问题是: 是否可以从另一个子类中调用一个子类中的独占方法? 如果可以,那代码是怎样的?如果可以的话,我相信这里有一些铸造,但我不知道如何做到这一点。
先谢谢您的帮助。
你可以使用 instanceof
铸工
public class Doctor extends Person {
//..some code
public void maternityWard() {
for(Person p : building.getPersonList()){
if(p instanceof Parent){
Parent parent = (Parent)p;
parent.setChildBorn();
}
}
}
P.S.虽然这会帮助你调用Parent的方法,但这是一个不好的做法,虽然对理解语言语义和语法有好处。
几个好的应用设计实践
你可以,但你总是有可能得到一个 ClassCastException
如果有 Doctor
中的对象 person
列表,而你忘了使用 instanceof
. 如果没有,假设你把 Person
在一个名为 p
. 然后,要访问方法do。
((Parent) p).setChildBorn();
是否可以从另一个子类中调用一个子类中的独占方法?
一个独占方法在其他子类(即同级类)中的可见性与在非同级类中的可见性是一样的,并且遵循同样的 门禁 适用于任何非同龄人类别。