Java面向对象的混乱

时间:2014-03-06 14:47:28

标签: java oop

所以我理解面向对象是如何工作的,但我想知道你是否可以这样做:

有某种类型对象的arraylist,让我们说水果。并且假设我们有5种类型的水果,当我们添加到数组列表时,我们会随机添加5种类型中的一种。这是可能的,如果是这样你会如何设置?

4 个答案:

答案 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”类。