エラーサンプルプログラム
継承時のオブジェクト作成処理のサンプルプログラムです。
サンプルプログラムの分析
この例はJavaでは正しくコンパイルできず、 Square構築メソッドの実行時にエラーが発生したため、上記のエラーが発生します。
Java では、サブクラスの構築メソッドを実際に実行する前に、親クラスの構築メソッドを実行するためにバックトラックする必要があると規定しています。
SquareクラスはRectangleクラスのサブクラスであるため、システムが実行すると: Square square = new Square (10);、システムは最初に親クラスRectangleクラスの構築メソッドを実行します。デフォルトでは、親クラスの空の構築メソッドが実行されます。この例では、Rectangle クラスはタイプRectangle ( int a, int b)の明示的な構築メソッドをすでに定義しているため、システムは Rectangle クラスのデフォルトの空の構築メソッドを生成しないため、一致するものが見つかりません。プログラムの実行時 親クラスの空のコンストラクター。
解決策 1
空のコンストラクターを親クラスに追加します。
class Rectangle {
...
Rectangle ( ) { } //方法 1: 空のコンストラクターを追加します
Rectangle (int a, int b){width =a; height=b;}
...
}
解決策 2
サブクラスの構築メソッドは、実行する親クラスの構築メソッドの種類を明示しています class Square
extends Rectangle { ... public Square(int a) { super(a,a); ... } //方法 2: 実行する親クラスの具体的な構築メソッドを指定する ... }