在继承和利用不同 类 中的属性时遇到问题
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);
}
}
但是,将 Person
和 Town
实例传递给 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 具有 单一继承。您不能从两个 类.
扩展
你可以做的是实现两个接口。
或者更好的是,您可以将 Town
和 Person
类型的两个字段添加到 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)
}
}
我是 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);
}
}
但是,将 Person
和 Town
实例传递给 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 具有 单一继承。您不能从两个 类.
扩展你可以做的是实现两个接口。
或者更好的是,您可以将 Town
和 Person
类型的两个字段添加到 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)
}
}