你能把多种类型的对象放在一个数组中吗?

时间:2017-03-27 16:08:00

标签: java arrays object

我被分配了通过java重新创建Oregon Trail的任务。我有一些要求 - 我必须有一个超类 - Location - 和sublcasses - TrailLandmarkCityFort和{{1}我必须使用并实例化它们。我目前认为,重新创建游戏的最佳方法是使用River循环(每个循环代表一天)并将里程减少到下一个里程碑,执行随机机会生病,减少食物配给量如果我这样做,我看到区分位置的唯一逻辑方式是为游戏中的每个站点创建每个类的实例(因此独立将是一个城市,堪萨斯河将是一个for)但我的问题是,有没有办法让所有这些实例都放在一个对象数组中,即使它们是不同的类(来自同一个超类)?我还没有找到关于语法的任何信息来执行此操作。

2 个答案:

答案 0 :(得分:2)

当然,你可以用Java做到这一点。

因为所有类都继承自Location类。你可以简单地创建这样的数组。

Location[] all = new Location[] {
  new Trail(),
  new LandMark(),
  new City()
};

答案 1 :(得分:0)

是的,你可以。你要做的事情叫做抽象,可能是多态的最强大的特征。 通过扩展允许我们为未来编程而创建的is-a关系,而不知道未来会带来什么。

在您的情况下,您可以创建<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <div> <!-- Nav tabs --> <ul class="nav nav-tabs" role="tablist"> <li role="presentation" class="active"><a href="#home" aria-controls="home" role="tab" data-toggle="tab">Home</a> </li> <li role="presentation"><a href="#profile" aria-controls="profile" role="tab" data-toggle="tab">Profile</a> </li> <li role="presentation"><a href="#messages" aria-controls="messages" role="tab" data-toggle="tab">Messages</a> </li> <li role="presentation"><a href="#settings" aria-controls="settings" role="tab" data-toggle="tab">Settings</a> </li> </ul> <!-- Tab panes --> <div class="tab-content"> <div role="tabpanel" class="tab-pane fade in active" id="home">1</div> <div role="tabpanel" class="tab-pane fade" id="profile">2</div> <div role="tabpanel" class="tab-pane fade" id="messages">3</div> <div role="tabpanel" class="tab-pane fade" id="settings">4</div> </div> <ul class="nav nav-tabs" role="tablist"> <li role="presentation" class="active"><a href="#home" aria-controls="home" role="tab" data-toggle="tab">Home</a> </li> <li role="presentation"><a href="#profile" aria-controls="profile" role="tab" data-toggle="tab">Profile</a> </li> <li role="presentation"><a href="#messages" aria-controls="messages" role="tab" data-toggle="tab">Messages</a> </li> <li role="presentation"><a href="#settings" aria-controls="settings" role="tab" data-toggle="tab">Settings</a> </li> </ul> </div>这将实例化一个类型为new Location[]的新数组,该数组将存储对Location个对象的引用。根据定义,由于Location 是-a Trail,您将能够在Location数组中存储对Trail个对象的引用。这同样适用于Location的所有其他子类。

这解释了 Hari Lamichhane

Location

但是,对该Location[] all = new Location[] { new Trail(), new LandMark(), new City() }; 对象的引用实际上存储为new Trail()引用(这就是为什么您可以在{{1}中存储该引用的原因由于Java是类型安全,如果没有引用Location引用的安全性转换,您将无法访问超类中未实现的任何方法(new Location[] )。

最后,如果每种类型的位置的实现与下一种位置完全不同,您可能需要考虑接口抽象类