Java 如何从super';s关联类

Java 如何从super';s关联类,java,subclass,superclass,Java,Subclass,Superclass,假设我创建了两个关联的类(Building和Person)。一座建筑物可容纳n人,一个人一次只能在一座建筑物内 到目前为止,守则(只是其中的相关部分)是: public class Building { //some attributes like name, location... private List<Person> person; //constructor //some methods } public class Person { /

假设我创建了两个关联的类(Building和Person)。一座建筑物可容纳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
}
因此,一旦到达这里,从
maternityWard
方法,我需要:

  • 在医生所在的建筑物的Person ListArray上迭代(没关系,有一种方法可以获取医生)
  • 对于ListArray上属于父对象实例的对象(我可以使用父对象的实例,因此这里没有任何意义),请调用方法
    setChildBorn()
  • 简单的模式如下:

    Building < association > Person
                           / extends \ 
                        Doctor     Parent
    
    建筑人
    /扩展\
    父母医生
    
    最后,问题是:是否可以从另一个子类调用子类中的排他方法? 如果是,代码是什么? 如果可能的话,我相信这里有一些演员,但我不知道如何做到这一点


    提前感谢您的帮助。

    您可以,但是如果在
    人员
    列表中有
    医生
    对象,而您忘了使用
    实例
    ,则您总是有风险获得
    ClassCastException
    。如果不是,则假设您将
    Person
    存储在名为
    p
    的变量中。然后,要访问该方法,请执行以下操作:

    ((Parent) p).setChildBorn();
    

    您可以,但如果
    人员
    列表中有
    医生
    对象,而您忘记使用
    实例
    ,则您总是有风险获得
    ClassCastException
    。如果不是,则假设您将
    Person
    存储在名为
    p
    的变量中。然后,要访问该方法,请执行以下操作:

    ((Parent) p).setChildBorn();
    
    是否可以从另一个子类调用子类中的排他方法 子类

    排他方法在其他子类(即同级类)中的可见性与非同级类中的可见性相同,并且适用于任何非同级类

    是否可以从另一个子类调用子类中的排他方法 子类


    独占方法在其他子类(即同级类)中的可见性与非同级类中的可见性相同,并且适用于任何非同级类。

    您可以使用
    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();
                }
        }
    }
    
    附言。 虽然这将帮助您调用Parent方法,但这是一种不好的做法,尽管它有助于理解语言语义和语法

    很少有好的应用程序设计实践

  • 较高和较低的标签模块应仅依赖于抽象。依赖于具体类而不是抽象注入了高度耦合。应用程序的设计应实现类之间的低耦合和高内聚性
  • 封装(构建不应直接公开其状态以供访问和修改,而应公开处理其状态的方法)
  • instanceof和casting是一种代码气味,避免两者
    您可以使用
    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();
                }
        }
    }
    
    附言。 虽然这将帮助您调用Parent方法,但这是一种不好的做法,尽管它有助于理解语言语义和语法

    很少有好的应用程序设计实践

  • 较高和较低的标签模块应仅依赖于抽象。依赖于具体类而不是抽象注入了高度耦合。应用程序的设计应实现类之间的低耦合和高内聚性
  • 封装(构建不应直接公开其状态以供访问和修改,而应公开处理其状态的方法)
  • instanceof和casting是一种代码气味,避免两者
    使用instanceof then Casting使用instanceof then Casting感谢您的回答@Arvind,这在理论上很有帮助。感谢您的回答@Arvind,这在理论上很有帮助。感谢@Higigig,简短但具体的解释。感谢@Higig,简短但具体的解释。非常感谢所有的细节@nits.kk,这正是我期望得到的答案。非常感谢所有的细节@nits.kk,这正是我期望得到的答案。