扩展实现另一个类的抽象类

时间:2016-06-13 07:44:22

标签: java class interface abstract

我是OOP的新手并且经历了与解析器相关的项目代码。 这包含以下类和接口。

    public interface Parser {
    }

    public abstract class AbstractParser implements Parser{
    }

    public class CSVParser extends AbstractParser{
    }

    public class XMLParser extends AbstractParser{
    }

我无法理解为什么要这样做?

3 个答案:

答案 0 :(得分:1)

接口Parser表示所有解析器必须提供的合同。

AbstractParser只实现该合约的部分,所有解析器的部分相同(如果有任何公共部分),并且还可以提供一些有用的受保护方法实施具体课程。

CSVParserXMLParser是具体实现。他们使用Parser提供的公共设施履行AbstractParser的合同。

此模式是一种分解公共代码的方法,因此它只编写一次并由所有实现共享。具体类只需要实现其特定需求所特有的代码。

答案 1 :(得分:1)

它是一个基本的OOP设计,它基本上是"Program for Interface rather than implementation"的一个例子,更清楚地读一次关于SOLID设计原则。

现在在这个代码中,有一个Parser接口,所以如果任何类是Parser那么它必须实现它,所以再次,如果我们想给每个解析器一些默认行为,那就是为什么那里是AbstractParser。

要理解此代码,您必须查看一次JDK源代码集合。 在这里,您将看到,List, Set, Map是接口,然后您有AbstrictList, AbstractSet, AbstractMap个类,这些类被定义为抽象类,并且具有某些方法的默认实现,如size()。然后你有像ArrayList, HashMap, HashSet这样的具体实现,你可以实例化它。 我会建议你一次完成收藏框架设计,并SOLID principles

答案 2 :(得分:0)

接口Parser可以用来声明像解析这样的方法及其返回类型和输入参数。

像CSVParser和XMLParser这样的实现类将使用覆盖典型面向对象行为的方法来定义方法体。

引入抽象类以介绍解析器需要的任何状态,例如:FileHandle,LogHandle。