在继承方面遇到麻烦;利用不同类别的属性

时间:2015-04-16 07:07:07

标签: java class inheritance subclass superclass

我是Stack Overflow& Java,我无法找到一种方法来创建一个利用来自其他两个类的属性的类。它不需要所有属性只需选择它们。

我有一个房子,城镇和一个人的班级。房子需要镇上的城镇名称和名称& 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;
    }

人员班:

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;
    }

我家班:

public class House extends Person, Town {

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

    }
}

但正如你所看到的,我似乎无法让家庭班级做我想做的事情,在搜索完在线资源后,无法找到很多帮助。任何指向正确方向的人都会非常感激。

3 个答案:

答案 0 :(得分:6)

众议院不能扩展人员和城镇。 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构造函数可能更有意义,因为同一城镇中可能有多个House,所以这是有道理的让他们分享同一个城镇的实例。

答案 1 :(得分:4)

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

例如,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;
    }
}

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

答案 2 :(得分:2)

Java具有单一继承。你不能从两个班级扩展。

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

或者您可以向Town添加两个PersonHouse类型的字段。

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)
    }
}