我知道这已经讨论过了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填充实现?如果是这样,对两个(或更多)子类使用单个方法实现的好处是什么。
答案 0 :(得分:2)
您可以对removeAllEdges使用相同的代码,只要它不依赖于底层结构(例如,矩阵或列表),或者功能是通过使用底层图形结构的封装方法实现的(例如,getter, setter,以及您可能需要的其他常用方法)。在我看来,后面的方法将是这个类的抽象方法,因为它们需要根据底层的图形结构来实现。
其中一个好处是代码重用。您只需编写一次,并在每个图形实现中使用它。在您的情况下,您有两个图表类,但您最终可能会根据您的应用程序对图表进行多次表示。编写通用方法是节省编码时间的好方法,它还可以帮助您以更高效,更有条理的方式维护代码。调试也更容易!!