所以我理解面向对象是如何工作的,但我想知道你是否可以这样做:
有某种类型对象的arraylist,让我们说水果。并且假设我们有5种类型的水果,当我们添加到数组列表时,我们会随机添加5种类型中的一种。这是可能的,如果是这样你会如何设置?
答案 0 :(得分:7)
设置
所以,假设你有一个超类Fruit
。
public class Fruit
然后你有一些使用它的课程。
public class Apple extends Fruit
public class Pear extends Fruit
如果你想要厚颜无耻......
public class Tomato extends Fruit
您将ArrayList
定义为
List<Fruit> fruit = new ArrayList<Fruit>();
并创建一个方法..
public Fruit getNextFruit()
{
// First create a random number.
int randomNum = new Random().nextInt(5);
// Then this is where I stop coding.
}
你的任务是......
现在由你来编码其余部分。您将拥有一个随机数和一些不同类型的Fruit
。你可以做各种各样的事情,但逻辑应该由你决定。
答案 1 :(得分:5)
有可能!拿这三个类(当然是三个不同的.java文件)。
public class Fruit {}
public class Apple extends Fruit {}
public class Orange extends Fruit {}
现在将它们添加到列表中。
ArrayList<Fruit> basket = new ArrayList<>();
basket.add(new Orange());
basket.add(new Apple());
您可以毫无问题地执行此操作,因为您创建了Fruit
列表。 Apple
是 Fruit
,而Orange
是 Fruit
。 是关系很重要。
以下内容不起作用,因为Orange
不是 Apple
。
ArrayList<Apple> apples = new ArrayList<>();
apples.add(new Orange()); // ERROR!
<强>琐事强>
Java中的所有对象都继承自Object类。您可以将 任何 添加到对象列表中。
ArrayList<Object> birthday = new ArrayList<>();
birthday.add(new Girlfriend());
birthday.add(new TV());
birthday.add(new Car());
答案 2 :(得分:1)
当然可以。如果你将ArrayList的泛型类型定义为Fruit,那么你可以像香蕉,橙子,苹果,西番莲一样传递任何东西。
答案 3 :(得分:0)
是的,如果你的所有对象都继承自超类Fruit:
List<Fruit> list = new ArrayList<>();
在此列表中,您可以添加任何类型的水果,只要扩展“Fruit”类。