有没有一种方法可以使用Java中的单个Object来运行继承自其他类的方法?

时间:2019-12-17 21:24:51

标签: java oop inheritance polymorphism

我遇到一个问题,要求创建一个对象,在本例中为 a ,每次我运行 eat 方法时,它都会打印出苹果,香蕉同伴,然后循环回苹果。

我很确定我需要创建3个类class apple class banana class peer,每个类都继承class Order,每个类都有一个方法eat()

不使用Java基本类型,循环,if语句,而仅使用面向对象的功能,如何使此代码成为可能?

Order a = new Order();
//a will change state after each method is called.
a.eat(); // Prints "ate apple"
a.eat(); // Prints "ate banana"
a.eat(); // Prints "ate peer"
a.eat(); // Prints "ate apple"
a.eat(); // Prints "ate banana"
a.eat(); // Prints "ate peer"

1 个答案:

答案 0 :(得分:2)

由于您的状态是纯数据,并且没有任何与之关联的行为,因此我认为完整状态设计对于此问题是过大的。我建议最简单的方法是使用一个非常基本的循环链表,每个节点中都有一个水果。 Order类仅可以打印当前节点中的数据,然后在每次调用eat()时前进到下一个。

例如 像这样给定NodeOrder

class Node {
    Node next;
    String data;

    public Node(String data) {
        this.data = data;
    }
    public String getData() {
        return data;
    }
    public Node getNext() {
        return next;
    }
    public void setNext(Node next) {
        this.next = next;
    }
}
class Order {
    Node node;

    public Order() {
        Node apple = new Node("apple");
        Node banana = new Node("banana");
        Node pear = new Node("pear");

        apple.setNext(banana);
        banana.setNext(pear);
        pear.setNext(apple);

        this.node = apple;
    }

    public void eat() {
        System.out.println(node.getData());
        node = node.getNext();
    }
}

您将获得所需的行为:

public static void main(String[] args) {
    Order a = new Order();
    a.eat(); // apple
    a.eat(); // banana
    a.eat(); // pear
    a.eat(); // apple
    a.eat(); // banana
    a.eat(); // pear
}