在其成员方法中实例化抽象类

时间:2013-05-24 16:42:14

标签: java class abstract-class

在使用Factory Pattern的代码库中,抽象类被实例化为其成员方法的参数。如果无法实例化抽象类,那么这种模式如何使用呢?这样做有什么好处吗?

import java.io.IOException;
public abstract class abstractClass {

public void member_method(abstractClass t, int i) throws IOException {
// Do something 
}

}

2 个答案:

答案 0 :(得分:1)

您提供的代码示例实际上并不意味着任何类似工厂的行为。这个类是抽象的事实也不是那么相关。以下是您的示例的更具体的示例实现:

public abstract class MyString {
    private String data;

    public MyString(String initialValue){
        data = initialValue;
    }

    public void append(MyString toAppend, int appendCount){
        for(int i = 0; i < appendCount; i ++){
            data = data + toAppend.data;
        }
    }
    public String toString(){
        return data;
    }
    public abstract notRelevantMethod();

}

对于这个类(我希望看起来很像你上面的例子)append方法,允许你将另一个MyString实例传递给你在MyString上调用的方法。在我的例子中,append方法不使用MyString上定义的任何抽象方法,但它可以。如果确实如此,则通常遵循“模板”编程模式。但是我想不出一个使用模板的好例子,并且有一个方法接受抽象类型的参数。

答案 1 :(得分:0)

由于这不是static方法,因此您必须假设传递到member_method的实例与this不是同一个实例。

所以你显然可以以某种方式创建这个类ab的两个实例(即创建一个具体的子类)。所有这些方法都说明你可以做a.member_method(b);