私は Java チュートリアルを読んでいましたが、次のように書かれていました。
抽象クラスはインスタンス化できませんが、サブクラス化できます。
これは何を意味するのでしょうか?サブクラスを作成するには、インスタンス化する必要があると思いましたか? この行は私を本当に混乱させました。どんな助けも大歓迎です。
私は Java チュートリアルを読んでいましたが、次のように書かれていました。
抽象クラスはインスタンス化できませんが、サブクラス化できます。
これは何を意味するのでしょうか?サブクラスを作成するには、インスタンス化する必要があると思いましたか? この行は私を本当に混乱させました。どんな助けも大歓迎です。
インスタンス化:
AbstractClass a = new AbstractClass(); //illegal
サブクラス:
class ConcreteClass extends AbstractClass { ... }
ConcreteClass c = new ConcreteClass(); //legal
抽象クラスを拡張する新しいクラスを作成し、すべての抽象メソッドを実装してから、その新しいクラスを使用する必要があります。
これも実行できることに注意してください。
class ConcreteClass extends AbstractClass { ... }
AbstractClass a = new ConcreteClass(); //legal
サブクラスは、その親クラスが持つすべてのプロパティ/メソッドを取得できますが、インスタンス化されたクラスは、その親クラスのインスタンスをメモリ内に作成するときです。
インスタンス化されたということは、クラスのオブジェクトを作成したいということです。サブクラスは継承子です。例えば、
abstract class A{
//Class A is abstract hence, can not be instantiated. The reason being abstract class provides the layout of how the concrete sub-class should behave.
pubic abstract void doSomething();
//This abstract method doSomething is required to be implemented via all the sub-classes. The sub-class B and C implement this method as required.
}
class B extends A{
//Class B is subclass of A
public void doSomething(){ System.out.println("I am class B"); }
}
class C extends A{
//Class C is subclass of A
public void doSomething(){ System.out.println("I am class C"); }
}
if you try to do this, it would generate an exception
A a = new A();
But this would work fine.
B b = new B();
or
A a = new B(); //Note you are not instantiating A, here class A variable is referencing the instance of class B