You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不继承Pole类的前提下,显示Hospital关联的Pole信息?

问题描述

我定义了三个Java类:Establishment类、继承自Establishment的Hospital类,以及Pole类。每个Hospital包含多个Pole,现在我希望在显示Hospital信息时,同时展示该Hospital关联的Pole信息,但Hospital并未继承Pole类,请问这是否可行?该如何实现?


现有代码实现

Pole类

public class Pole{
    private String name;
    private String address;
    private int nTelephone;
    private String hospital;
    public Pole(){
        name = "";
        address = "";
        nPhone = 0;
        hospital = "";
    }
    public Pole(String name, int nTelephone, String address, String hospital){
        this.name = name;
        this.address = address;
        this.nPhone = nPhone;
        this.hospital = hospital;
    }
    public void setPole(String name, int nTelephone, String address, String hospital){
        this.name = name;
        this.address = address;
        this.nPhone = nPhone;
        this.hospital = hospital;
    }
    public void getPole(){
        System.out.println("Name: " + name);
        System.out.println("Address: " + address);
        System.out.println("Phone number: " + nPhone);
        System.out.println("Belongs to hospital " + hospital);
    }
}

Hospital类

public class Hospital extends Establishment{
    private String address;
    public Hospital(){
        address = "";
    }
    public Hospital (String name, String address, String email){
        super(name, email);
        this.address = address;
    }
    public void setHospital(String name, String address, String email){
        setHospital(name, email);
        this.address = address;
    }
    public void getHospital(){
        getEstablishment();
        System.out.println("Address:"+ this.address);

    }
    public String getHospitalName(){
       return getEstablishmentName();
    }
}

Establishment类

public class Establishment{
    private String name;
    private String email;
    public Establishment(){
        name = "";
        email = "";
    }
    public Establishment (String name, String email){
        this.name = name;
        this.email = email;
    }
    public void getEstablishment(){
        System.out.println("Name: " + this.name);
        System.out.println("Email: " + this.email);
    }
    public void setEstabelecimento(String name, String email){
        this.name = name;
        this.email = email;
    }
    public String getEstablishmentName(){
        return this.name;
    }
}

addHospital方法

public void addHospital() {
    Scanner r = new Scanner(System.in);
    String name;
    String email;
    String address;
    String namePole;
    String addressPole;
    int nTelPole;
    int addPole;
    System.out.println("==== Add Hospital ====");
    System.out.println("Enter name");
    name = r.nextLine();
    System.out.println("Enter email");
    email = r.nextLine();
    System.out.println("Enter address");
    address = r.nextLine();
    numberHospitals++;
    unidadesHospitalares[numHospitals - 1] = new Hospital();
    unidadesHospitalares[numHospitals - 1].setHospital(name, email, address);
    System.out.println("==== Add Pole====");
    System.out.println("Enter name");
    namePole = r.nextLine();
    System.out.println("Enter phone number");
    nTelPole = r.nextInt();
    r.nextLine();
    System.out.println("Enter the address");
    addressPole = r.nextLine();
    r.nextLine(); // 清除输入缓冲区
    numPoles ++;
    poles[numPoles - 1] = new Pole();
    String associatedHospital = hospitalUnits[numeroHospitais - 1].getNameHospital();
    poles[numPoles - 1].setPole(namePole, nTelPole, addressPole, associatedHospital);
    sleep(3000);
    clear();
}

当前showHospital方法

public void showHospital(){
    if (numberHospitals == 0){
        System.out.println("There are no Hospitals!");
    }
    System.out.println("==== Hospitals ====");
    for (int i =0 ; i< numeroHospitals ; i++){
        unitsHospitals[i].getHospital();
        System.out.println("====&quot;);
    }
    sleep(3000);
    clear();
    menuHospital();
}

可行性分析与实现方案

完全可行。Hospital和Pole是关联关系(has-a),而非继承关系(is-a),不需要通过继承就能实现关联信息的展示。以下是具体实现步骤:

1. 给Hospital类添加集合存储关联的Pole

在Hospital中维护一个List<Pole>集合,用于保存属于该医院的所有科室,同时提供添加科室的方法:

import java.util.ArrayList;
import java.util.List;

public class Hospital extends Establishment{
    private String address;
    // 新增集合存储关联的Pole
    private List<Pole> poles = new ArrayList<>();

    public Hospital(){
        address = "";
    }
    public Hospital (String name, String address, String email){
        super(name, email);
        this.address = address;
    }

    // 修复原方法的递归错误:调用父类的setEstabelecimento而非自身setHospital
    public void setHospital(String name, String address, String email){
        super.setEstabelecimento(name, email);
        this.address = address;
    }

    public void getHospital(){
        getEstablishment();
        System.out.println("Address:"+ this.address);
        // 新增:展示关联的Pole信息
        if(!poles.isEmpty()){
            System.out.println("--- 关联科室信息 ---");
            for(Pole pole : poles){
                pole.getPole();
                System.out.println("-------------------");
            }
        }
    }

    public String getHospitalName(){
       return getEstablishmentName();
    }

    // 新增:添加Pole到当前医院的方法
    public void addPole(Pole pole){
        poles.add(pole);
    }
}

2. 修正Pole类的变量名错误

原代码存在变量名不一致问题(定义nTelephone但赋值用nPhone),统一修正:

public class Pole{
    private String name;
    private String address;
    private int nTelephone;
    private String hospital;

    public Pole(){
        name = "";
        address = "";
        nTelephone = 0;
        hospital = "";
    }

    public Pole(String name, int nTelephone, String address, String hospital){
        this.name = name;
        this.address = address;
        this.nTelephone = nTelephone;
        this.hospital = hospital;
    }

    public void setPole(String name, int nTelephone, String address, String hospital){
        this.name = name;
        this.address = address;
        this.nTelephone = nTelephone;
        this.hospital = hospital;
    }

    public void getPole(){
        System.out.println("Name: " + name);
        System.out.println("Address: " + address);
        System.out.println("Phone number: " + nTelephone);
        System.out.println("Belongs to hospital " + hospital);
    }
}

3. 修改addHospital方法,关联Pole到对应Hospital

调整逻辑,将创建的Pole直接添加到对应的Hospital对象中:

public void addHospital() {
    Scanner r = new Scanner(System.in);
    String name;
    String email;
    String address;
    String namePole;
    String addressPole;
    int nTelPole;

    System.out.println("==== 添加医院 ====");
    System.out.println("输入名称");
    name = r.nextLine();
    System.out.println("输入邮箱");
    email = r.nextLine();
    System.out.println("输入地址");
    address = r.nextLine();
    
    // 创建并初始化Hospital对象
    numberHospitals++;
    Hospital newHospital = new Hospital(name, address, email);
    unidadesHospitalares[numberHospitals - 1] = newHospital;

    System.out.println("==== 添加科室 ====");
    System.out.println("输入科室名称");
    namePole = r.nextLine();
    System.out.println("输入电话号码");
    nTelPole = r.nextInt();
    r.nextLine(); // 清除输入缓冲区
    System.out.println("输入科室地址");
    addressPole = r.nextLine();
    
    // 创建Pole并关联到当前医院
    Pole newPole = new Pole(namePole, nTelPole, addressPole, newHospital.getHospitalName());
    newHospital.addPole(newPole);

    // 若需单独存储Pole数组,保留以下代码(可选)
    numPoles ++;
    poles[numPoles - 1] = newPole;

    sleep(3000);
    clear();
}

4. showHospital方法无需额外修改

因为getHospital()方法已经新增了关联Pole的展示逻辑,原showHospital循环调用getHospital()时会自动显示医院的科室信息。


内容的提问来源于stack exchange,提问作者José Filipe Silva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 00:40:56