14

抽象クラスのオブジェクトを構築することはできませんが、型が抽象クラスであるオブジェクト参照を持つことはできることに注意してください。もちろん、それが参照する実際のオブジェクトは、具体的なサブクラスのインスタンスでなければなりません:

Account anAccount; // OK
anAccount = new Account(); // Error—Account is abstract
anAccount = new SavingsAccount(); // OK
anAccount = null; // OK

抽象クラスへのオブジェクト参照を持つことができる理由を理解していません...

4

2 に答える 2

16

型が抽象クラスのオブジェクト参照がある場合、その参照は「抽象クラスを参照している」という意味ではありません。代わりに、「その抽象クラスのサブクラスである実際のオブジェクトを参照している」ことを意味します。SavingsAccountこれが、 からサブクラス化された非抽象クラスであるへの参照を参照させることができる理由ですが、実際には をインスタンス化できないため、 をAccount指すようにすることはできません。new Account()Account

参照自体は抽象クラスの実際のインスタンスではないことに注意してください。

お役に立てれば!

于 2013-10-28T02:58:05.153 に答える
2

問題は、抽象メンバ ルーチンを呼び出せないことです。
「new」を呼び出すと、実際にはクラスのコンストラクターを呼び出しています。
抽象メンバー関数を呼び出そうとしているため、エラーが発生します。

抽象クラスは、そこから派生する実際のクラスの青写真にすぎないため、参照できます。インターフェイスに少し似ていますが、継承があります。
インターフェイスをインスタンス化できないのと同じように、抽象クラスをインスタンス化することはできません。

もちろん、これはポリモーフィズムの一部です。
抽象クラスとインターフェースの違いは非常に小さいです。次を参照してください:インターフェースと抽象クラス (一般的なオブジェクト指向)

于 2013-10-28T03:03:00.023 に答える