公式アカウントからの投稿が始まります

・抽象クラスは、なぜ(オーバーライドしないと)オブジェクトを生成できないのでしょうか?
・インタフェースみたいに、抽象メソッドしか宣言することができないなら話は分かるのですが…
・抽象メソッドでない普通のメソッドを実装できるのなら、オブジェクトを生成してくれても良いと思うのですが…

・そういう問題ではない?

A 回答 (4件)

>・抽象メソッドでない普通のメソッドを実装できるのなら、オブジェクトを生成してくれても良いと思うのですが…


これは言語仕様の話で、Javaはクラス単位でしか定義できません。
ですから、抽象メソッドの有無でインスタンスの生成を分けるといったことができません。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
大変参考になりましたー

お礼日時:2013/10/15 17:29

質問が間違っています。


オブジェクトを生成できないクラスを抽象クラスというのですから、抽象クラスがオブジェクトを生成できないのは定義通りで、当たり前のことです。

むしろ「なぜ抽象クラスというものがあるのか?」と問うべきです。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

>当たり前のことです
・その通りだと思うのですが、言語仕様だとしたら、Javaの仕様書(?)のどこに書いているか等、知りたかったです

お礼日時:2013/10/15 17:35

> 抽象クラスは、なぜ(オーバーライドしないと)オブジェクトを生成できないのでしょうか?



実装を持たない抽象メソッドの記述が可能という時点で、実装の無いメソッドの実行をどうするのかという問題が出てくると思いますが・・・。

例えば、

public abstract class AbstractHoge {
public abstract String methodA();
}

という抽象クラスが有って、

AbstractHoge hoge = new AbstractHoge(); // 抽象クラスがインスタンス化可能と仮定
System.out.println(hoge.methodA());

というコードが書けた場合、どの様な動作/出力が正当だと考えますか?
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
抽象メソッドを含まない抽象クラスなら、オブジェクト生成出来ないのだろうか、と思い、質問してみましたー

お礼日時:2013/10/15 17:31

抽象メソッドを呼び出せないようにするため, ではないかな.

    • good
    • 0
この回答へのお礼

回答ありがとうございました。
確かにその通りですね

お礼日時:2013/10/15 17:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!