Java - 类层次结构

3
我对编程相对较新,我的一个课程需要创建以下内容的类层次结构: Country、State、County、City、Boundary和River。
我该如何做呢?
我认为我不能使用extends,因为它意味着一件事是另一件不同的事情,这样想是正确的吗?此外,我了解到Java中有一个HAS-A关系,但我不知道如何使用它,我只需创建单独的类文件吗?还是还有其他方法可以做到这一点?
谢谢任何帮助!

@JonK,不是的。我需要让国家能够拥有多个州,州可以拥有多个县等等,并且我需要能够获取每个国家的州列表以及每个对象的其他列表。我该如何修改我的问题以使其更清晰? - user3558214
1
我认为这要求同时使用继承和组合。一个Country拥有States,而一个River是一个Boundary - Boris the Spider
你知道如何创建一个具有类型为String的字段namePerson对象吗?那么你也知道如何创建一个具有类型为County的字段countyCountry类。 - Jeroen Vannevel
这个问题值得一看:https://dev59.com/THE95IYBdhLWcg3wPbZ7 - JonK
3个回答

0
一个国家有一个州
一个州有一个县
一个县有一个城市
一个城市可以有一条河
我想你可以说它们都有边界。这取决于你对边界的定义。要实现:
public class Country
{
    private State states[];
    private Boundary boundary;
}

public class State
{
    private County counties[];
    private Boundary boundary;
}

public class County
{
    private City cities[];
    private Boundary boundary;
}

public class City
{
    private River rivers[];
    private Boundary boundary;
}

public class Boundary{}

如果你想要严谨一些,我想有时候状态会被河流所限制:

States

public class River extends Boundary{}

假设一个“国家”只能有一个“州”,一个“州”只能有一个“县”,以此类推... - JonK
我在这里看到一些1:n而不是1:1的关系(例如,国家有多个州)。 - qqilihq
“River”的边界是什么? - Jeroen Vannevel
哦,天啊,大家都太泛泛了,你们想让我举一个完整的技术例子吗? - John
@JeroenVannevel 如果你想要更加严谨的话,你可以说岸线是河流的边界。我不知道你们会因为我太泛泛而嘲笑我哈哈。我会尽量更具体的。 - John

0

你是对的,extends 是一个“IS-A”的事物。你需要的是一个“HAS-A”的事物。这可以通过类和成员关系实现。

让我们以国家、州和城市为例,从最小的城市开始。由于city是一个真实的世界实体,所以让我们为城市创建一个类。

class City{
   //members of city class
}

我们知道一个州可以有多个城市,比如说三个。现在让我们创建一个HAS-A关系。

class State{
  City city1;
  City city2;
  City city3
}

同样地,一个国家可以有许多州和独立的城市(例如印度的联邦属地)。
class Country{
  State state1;
  State state2;
  City city1;
}

希望现在对你来说已经很清楚了。


0

思考哪些事物是相似的。

国家、州、县、城市都是可以相互包含的地理实体。

河流是一种可以跨越人类定义的边界的地理实体。

边界是用来描述上述任何一个实体的东西。

国家、州、县、城市和河流都有一些共同的属性。例如,它们可能都有一个名称。它们也都有一个边界。这意味着它们可能应该共享一个公共的基类(也许是地理实体)。

国家、州、县、城市有一个层次结构,并且它们是人为定义的。您可以考虑地理实体的子类,比如政治实体,它具有以下内容:

  • 它所属的父政治实体
  • 零个或多个它所包含的实体的列表(例如,一个国家包含州)。

请注意,在现实生活中情况并不完全简单(例如,有跨越县甚至州界线的城市),但是对于学习来说,这些边缘情况可能可以忽略。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接