在继承和利用不同 类 中的属性时遇到问题

Having trouble regarding inheritence & utilising attributes in different classes

我是 Stack Overflow 和 Java 的新手,我很难找到一种方法来制作一个 class 来利用其他两个 classes 的属性。它不需要所有属性,只需要 select 个属性。

我有房子、城镇和一个人class。房子需要来自城镇的城镇名称和来自人的名称 & phNumber

到目前为止,这是我的代码:

public class Town {
    protected String name;
    private int postCode;

    public Town (String tName , int tCode){
        name = tName;
        postCode = tCode;

    }

    public String getName(String name){
        return name;
    }

    public int getCode(int postCode){
        return postCode;
    }

那个人class:

public class Person {
    protected String pName;
    private long pNumber;

    public Person (String name,long number){
        pName = name;
        pNumber = number;
    }

    public String getPersonName(String name){
        return pName;
    }

    public long getNumber(long number){
        return pNumber;
    }

    public void setNumber(long newNumber){  
        pNumber = newNumber;
    }

还有我家class:

public class House extends Person, Town {

    public House(String address , String name, int code , String pName,     Long pNumber) {
        this.name = Person.pName;

    }
}

但如您所见,我似乎无法让房子 class 做我想做的事,并且在搜索在线资源后找不到太多帮助。任何指向正确方向的指示将不胜感激。

House 不能同时扩展 Person 和 Town。 Java 不允许多重继承。

而且它无论如何都没有意义。房子不是人,房子不是城镇。

组合会更有意义 - 房子包含一个人(或可能是多个人)并且位于城镇中。

例如:

public class House {

    private Person person;
    private Town town;

    public House(String address , String name, int code , String pName, Long pNumber) 
    {
        this.Town = new Town (name, code);
        this.person = new Person (pName, pNumber);
    }
}

但是,将 PersonTown 实例传递给 House 构造函数可能更有意义,因为同一个城镇中可以有多个房屋,所以它他们共享同一个 Town 实例是有意义的。

第一个问题:您想使用什么以及如何使用?你应该让你的 类 反映有意义的东西,这样更容易思考如何创建和使用它们。

例如 House 可以在 Town 中并包含 Person

public class House
{
    private Town    inTown;
    private Person  owner;

    public House (Town inTown, Person owner)
    {
        this.inTown = inTown;
        this.owner = owner;
    }
    public String getTownName()
    {
        return this.inTown.getName();
    }
}

或者,如果您真的只关心名称:

public class House
{
    private String  townName;
    private String  ownerName;

    public House (Town inTown, Person owner)
    {
        this.townName = inTown.getName();
        this.ownerName = owner.getName();
    }
    public String getTownName()
    {
        return this.townName;
    }
}

如果内存不是问题,我会建议第一个解决方案,因为它更容易扩展和维护。

Java 具有 单一继承。您不能从两个 类.

扩展

你可以做的是实现两个接口。

或者更好的是,您可以将 TownPerson 类型的两个字段添加到 House

public class House {
    private Town town;
    private Person person;

    public House(Town town, Person person) {
        this.town = town;
        this.person = person;
        // Now you can use town and person attributes (if they are public or if they are exposed with getter and setter)
    }
}