我正在阅读一些源代码,并且无法弄清楚为什么抽象类中有两个非抽象的空方法。
抽象类就像:
CREATE OR REPLACE FUNCTION test.mytest(param varchar)
RETURNS SETOF record
LANGUAGE sql
AS
$body$
SELECT * from test.mytable;
$body$
VOLATILE;
只有其中一个具体类覆盖并使用它们,但我可以直接在具体类中实现这些方法吗?所以我想知道它们是否可以被取消,它们的用途是什么?
答案 0 :(得分:3)
对我而言,这是一种代码味道。这就是原因:
final
表达出来。abstract
。要消除这种气味,我会删除它们或制作它们abstract
。
答案 1 :(得分:2)
虽然不是最常见的情况,但有时它在模板方法的上下文中很方便。在这种情况下,有一个定义流的方法,将一些部分的具体实现留给其子类。在某些情况下,默认的具体行为是什么都不做,
将基类中的具体方法留空,但允许 通过覆盖子类中的自定义
答案 2 :(得分:1)
究竟是什么,如果空方法有一些代码。这些方法被认为是实施的。由于只有一个具体类实现了这个抽象类,所以空方法没有意义。
答案 3 :(得分:1)
这对于覆盖某些内容是可选的情况非常有用。例如,在java.awt.event
中,有一个接口:
public interface MouseListener extends EventListener {
public void mouseClicked(MouseEvent e);
public void mousePressed(MouseEvent e);
public void mouseReleased(MouseEvent e);
public void mouseEntered(MouseEvent e);
public void mouseExited(MouseEvent e);
}
然后有一个抽象类:
public abstract class MouseAdapter implements MouseListener, MouseWheelListener, MouseMotionListener {
有很多空实现。因此,您可以扩展适配器而不是实现接口,而只覆盖您真正感兴趣的方法,而无需为您甚至不关心的所有方法添加空实现。
这使得实现更加精细和紧凑。