抽象クラスを継承することによってのみインスタンス化できるが、直接インスタンス化できないことを読んだことがあります。
ただし、別のクラスのメソッドを呼び出すことで、抽象クラスのタイプのオブジェクトを作成できることがわかりました。
たとえば-LocationProvider
は抽象クラスであり、LocationManager
クラスのgetProvider()
関数を呼び出すことでインスタンス化できます。
LocationManager lm = getSystemService(Context.LOCATION_PROVIDER);
LocationProvider lp = lm.getProvider("gps");
抽象クラスはどのようにここでインスタンス化されますか?
抽象クラスを直接インスタンス化することはできませんが、具象クラスがない場合は匿名クラスを作成できます。
public class AbstractTest {
public static void main(final String... args) {
final Printer p = new Printer() {
void printSomethingOther() {
System.out.println("other");
}
@Override
public void print() {
super.print();
System.out.println("world");
printSomethingOther(); // works fine
}
};
p.print();
//p.printSomethingOther(); // does not work
}
}
abstract class Printer {
public void print() {
System.out.println("hello");
}
}
これはインターフェイスでも機能します。
いいえ、抽象クラスをインスタンス化することはできません。それが抽象クラスの目的です。参照しているgetProvider
メソッドは、抽象クラスの特定の実装を返します。これは、抽象的なファクトリパターンです。
いいえ、抽象クラスはインスタンス化できません。
他の人によると、抽象クラスからインスタンス化することはできません。しかし、それを使用する2つの方法が存在します。 1.抽象クラスから拡張する別の非抽象クラスを作成します。したがって、新しいクラスからインスタンス化し、抽象クラスの属性とメソッドを使用できます。
public class MyCustomClass extends YourAbstractClass {
/// attributes, methods ,...
}