如何用接口方法替换抽象方法?

How do I replace an abstract method with an interface method?

提问人:idkusrname126 提问时间:11/11/2023 更新时间:11/11/2023 访问量:71

问:

我在一个包中有几个 java 文件。package stacks

第一个是包含方法的类。abstract class Stackpublic abstract void print()

第二个是包含方法的接口。public interface FancilyPrintvoid fancyPrint()

我现在正在上一门课。public class LinkedListStack extends Stack implements FancyPrint

如何编写满足接口约定的方法,而不从抽象类编写无用的方法?在这个类中有一个标准方法是没有用的,因为它用自己的方法实现接口。我不记得该怎么做了。fancyPrint()void print()print()fancyPrint()

以下是我的课程供参考:

堆栈.java:

package stacks;

public abstract class Stack<AnyType>
{
    public abstract void push(AnyType data);

    public abstract AnyType pop();

    public abstract AnyType peek();

    public abstract boolean isFull();

    public abstract boolean isEmpty();

    public abstract void print();
}

LinkedListStack.java

package stacks;

import linkedlists.*;

public class LinkedListStack<SomeType> extends Stack<SomeType> implements FancyPrint
{
    LinkedList<SomeType> l = new LinkedList<>();
    
    @Override
    public void push(SomeType data)
    {
        l.head_insert(data);
    }

    @Override
    public SomeType pop()
    {
        return l.delete_head();
    }

    @Override
    public SomeType peek()
    {
        return l.headData();
    }

    @Override
    public boolean isFull()
    {
        return false;
    }

    @Override
    public boolean isEmpty()
    {
        return l.isEmpty();
    }

    @Override
    public void fancyPrint()
    {
        
    }

    // I do not need this method for this class. I will need it for other classes
    // that extend the Stack abstract class.
    @Override
    public void print()
    {

    }

FancilyPrint 接口:

package stacks;

public interface FancilyPrint
{
    void fancyPrint();
}
Java 继承 接口

评论

0赞 idkusrname126 11/11/2023
我想我可以从'print()'方法调用'fancyPrint()'方法。这是同时满足抽象类和接口的唯一方法吗?

答:

0赞 idkusrname126 11/11/2023 #1

我知道我可以从该方法调用该方法。这是我唯一能想到的。fancyPrint()print()

1赞 Sergey Afinogenov 11/11/2023 #2

我认为您应该从类中排除方法并创建一个具有方法的接口。所以会实现,但其他类会实现。printStackSimplePrintableprintLinkedListStackFancyPrintableSimplePrintable

2赞 Reilas 11/11/2023 #3

为每个打印程序创建和实施。

interface Print {
    void print();
}

class BasicPrint implements Print {
    @Override
    public void print() {

    }
}

class FancilyPrint implements Print {
    @Override
    public void print() {

    }
}

然后,选择 Stack 是应实现 BasicPrint 还是 FancilyPrint

abstract class Stack extends BasicPrint { }
class LinkedListStack extends Stack { }
1赞 Jamesy82 11/11/2023 #4

与其他人所说的类似,我会从 Stack 抽象类中删除 print() 方法并将其放在单独的接口中。但是,我会更改打印方法以采用它应该打印的堆栈。

interface StackPrinter {
  void print(Stack stack);
}

然后,您可以实现 SimpleStackPrinter、FancyStackPrinter 和任何其他需要的实现,并且由于它不再是 Stack 类的一部分,因此任何堆栈都可以传递给任何打印机。