Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有一种方法可以在Java中使用单个对象来运行继承的其他类的方法?_Java_Oop_Inheritance_Polymorphism - Fatal编程技术网

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

有没有一种方法可以在Java中使用单个对象来运行继承的其他类的方法?,java,oop,inheritance,polymorphism,Java,Oop,Inheritance,Polymorphism,我遇到一个问题,要求创建一个对象,在本例中,a,每次我运行方法eat,它都会按顺序打印出苹果、香蕉对等体,然后循环返回苹果 我很确定我需要制作3个类classappleclassbanana类peer,每个类继承类顺序,每个类都有一个方法eat() 如果不使用Java原语类型、循环、if语句,并且只使用面向对象的特性,我如何使这段代码成为可能 Order a = new Order(); //a will change state after each method is called. a.e

我遇到一个问题,要求创建一个对象,在本例中,a,每次我运行方法eat,它都会按顺序打印出苹果、香蕉对等体,然后循环返回苹果

我很确定我需要制作3个类
classapple
classbanana
类peer
,每个类继承
类顺序
,每个类都有一个方法
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"

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

e、 g。 给定一个
节点
顺序

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
}

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

e、 g。 给定一个
节点
顺序

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
}

如果您只是创建一个对象,其行为在每次调用方法时都会发生变化,那么这与多态性无关,多态性是关于类如何从其他类型继承行为的。说明设计模式,但仍需要3个额外类?@Evgeniy不需要3个额外类。我认为应该使用它,但可能是错误的。@Michael为什么它可能是错误的?通过创建一个额外的对象,您将使用多态性,它是面向对象的。如果你想通过额外的水果来扩展它,这很容易做到您希望将整个逻辑置于命令NP use states中以更改行为,然后如果您只是创建一个对象,其行为在每次调用方法时都会更改,那么这实际上与多态性无关,多态性是关于类如何从其他类型继承行为的。说明设计模式,但仍需要3个额外类?@Evgeniy不需要3个额外类。我认为应该使用它,但可能是错误的。@Michael为什么它可能是错误的?通过创建一个额外的对象,您将使用多态性,它是面向对象的。如果你想通过额外的水果来扩展它,这很容易做到您希望将整个逻辑置于命令中,然后使用状态来更改行为