子类在具有不同构造函数的抽象超类中实现的常用方法

时间:2014-03-24 07:35:16

标签: java oop abstract-class

我知道这已经讨论过了here,但我还有一些问题需要补充。我需要创建一个名为AbstractGraph的抽象类,它必须通过两种类型的图形实现进行扩展:一种使用矩阵,另一种使用列表。

到目前为止,我有这样的事情:

abstract class AbstractGraph implements Graph {

    public void removeAllEdges(){
        //implementation here 
    }

}

和子类:

public GraphMatrix(){
    GraphMatrix()
    {
        //implementation for matrix type 
    }
}

public GraphList(){
    GraphList()
    {
        //different implementation for lists type
    }
}

两个实现都会使用完全相同的removeAllEdges()方法编写,因此我猜它必须放在抽象类中。我的问题是,如何在抽象类中使用对this的引用?我是否必须使用getter和setter填充实现?如果是这样,对两个(或更多)子类使用单个方法实现的好处是什么。

1 个答案:

答案 0 :(得分:2)

您可以对removeAllEdges使用相同的代码,只要它不依赖于底层结构(例如,矩阵或列表),或者功能是通过使用底层图形结构的封装方法实现的(例如,getter, setter,以及您可能需要的其他常用方法)。在我看来,后面的方法将是这个类的抽象方法,因为它们需要根据底层的图形结构来实现。

其中一个好处是代码重用。您只需编写一次,并在每个图形实现中使用它。在您的情况下,您有两个图表类,但您最终可能会根据您的应用程序对图表进行多次表示。编写通用方法是节省编码时间的好方法,它还可以帮助您以更高效,更有条理的方式维护代码。调试也更容易!!