有没有一种方法可以在Java中使用单个对象来运行继承的其他类的方法?
我遇到一个问题,要求创建一个对象,在本例中,a,每次我运行方法eat,它都会按顺序打印出苹果、香蕉对等体,然后循环返回苹果 我很确定我需要制作3个类有没有一种方法可以在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
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为什么它可能是错误的?通过创建一个额外的对象,您将使用多态性,它是面向对象的。如果你想通过额外的水果来扩展它,这很容易做到您希望将整个逻辑置于命令中,然后使用状态来更改行为