提问人:idkusrname126 提问时间:11/11/2023 更新时间:11/11/2023 访问量:71
如何用接口方法替换抽象方法?
How do I replace an abstract method with an interface method?
问:
我在一个包中有几个 java 文件。package stacks
第一个是包含方法的类。abstract class Stack
public abstract void print()
第二个是包含方法的接口。public interface FancilyPrint
void 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();
}
答:
我知道我可以从该方法调用该方法。这是我唯一能想到的。fancyPrint()
print()
我认为您应该从类中排除方法并创建一个具有方法的接口。所以会实现,但其他类会实现。print
Stack
SimplePrintable
print
LinkedListStack
FancyPrintable
SimplePrintable
为每个打印程序创建和实施。
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 { }
与其他人所说的类似,我会从 Stack 抽象类中删除 print() 方法并将其放在单独的接口中。但是,我会更改打印方法以采用它应该打印的堆栈。
interface StackPrinter {
void print(Stack stack);
}
然后,您可以实现 SimpleStackPrinter、FancyStackPrinter 和任何其他需要的实现,并且由于它不再是 Stack 类的一部分,因此任何堆栈都可以传递给任何打印机。
评论