「Java/抽象クラス」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
タグ: 2017年版ソースエディター
 
Ef3 (トーク | 投稿記録)
→‎抽象クラス: +コメンタリー
タグ: 2017年版ソースエディター
14 行
抽象クラスは、それ自体はインスタンス化することは'''出来ません'''。
インスタンス化することは出来ませんが、抽象クラスを別のクラスが継承する事は出来ます。
また、抽象クラスを <code>super()</code> を使うことでメソッドを呼び出せるので、抽象メソッドではないメソッド(具象メソッド)を持つことも、データメンバーも持つことも出来ます。
次の例では、Shapeのコンストラクターが抽象クラスの具象メソッドとなっています。
 
次のプログラムは、二次元座標系の図形について扱っています。
 
;コード例:<syntaxhighlight lang=Java line>
89 ⟶ 92行目:
Square(3.000000, 2.000000, 20.000000): 1257.037061
</syntaxhighlight>
;abstract class Shape:抽象クラス図形;他のクラスはこのクラスを継承。
:;Shape(double x, double y):コンストラクター;private ですが、継承したクラスのコンストラクターから super として参照されるだけなので構いません。
:;double x, y:座標値
:;abstract public String toString():文字列化(抽象メソッド)
:;abstract public double area():面積(抽象メソッド)
;class Square:具象クラス正方形;Shapeを継承
:;Square(double x, double y, double wh):コンストラクター;追加の引数は一辺の長さ。
:;public String toString():文字列化(具象メソッド)
:;public double area():面積(具象メソッド)
;class Rectangle:具象クラス長方形;Shapeを継承
:;Rectangle(double x, double y, double w, double h):コンストラクター;追加の引数は幅と高さ。
:;public String toString():文字列化(具象メソッド)
:;public double area():面積(具象メソッド)
;class Circle:具象クラス円;Shapeを継承
:;Circle(double x, double y, double r):コンストラクター;追加の引数は半径。
:;public String toString():文字列化(具象メソッド)
:;public double area():面積(具象メソッド)
:
;Shape[] shapes:図形の配列;Shapeを継承したクラスのインスタンスは3つとも要素になれますが、当のShapeはインスタンス化出来ないので要素になれません。
;for (Shape shape<nowiki>:</nowiki> shapes) ...
:Shapeを継承したクラスのインスタンスが来ることは判っているので、これでイテレーション出来ます。
:呼んでいるメソッドも、抽象メソッドなので具体的なクラスは(Shapeを継承しているので)問いません。