コンストラクタとは
- ▶コンストラクタ
-
- インスタンスが生成されるときに自動的に実行される特別なメソッド
-
クラス名 (引数列){
命令文
}
- ▶クラス名と同じ名前のメソッド
- ▶引数を渡せる(初期化に使用できる)
- ▶戻り値を定義できない
コンストラクタはメソッドです。
コンストラクタはインスタンス生成時に自動的に実行されるメソッドです。つまり何も書かなくても勝手に実行されます。
コンストラクタはメソッドなので構文の初めはメソッド名を記述すると思われるかもしれません。
ですがコンストラクタの構文の初めには必ずクラス名を記述します。
これがコンストラクタの特徴になります。
コンストラクタの例
Pointクラスのコンストラクタメソッドはメソッド名とクラス名が一致しています。
このメソッドの機能は代入です。
変数xと変数yをこのPointクラスのxとyに代入するという機能を持っています。
コンストラクタメソッドから整数型の引数を呼び出し側に2つ渡します。(5と10)
引数を渡された呼び出し側はインスタンスを生成します。
インスタンスが生成された時点でコンストラクタが呼び出されて、5と10はそれぞれxとyに代入されます。
実行結果
5
10
演習問題
class Ractangle {
double width ; // 幅
double height: // 高さ
}
- Rectangleクラスに面積を戻り値とするgetAreaメソッドを追加
- 幅と高さを指定できるコンストラクタを追加(幅と高さに数字を代入することを初期化といいます)
- 引数で渡されたRectangleクラスのインスタンスと比較し、自分の方が面積が大きければtrue,
そうでなければfalseを戻り値とするisLargerメソッドを追加する
ヒント
メソッドは3つあります。
getAreaメソッド:幅と高さの掛け算をしてその値を返すメソッド
isLargerメソッド:2つの長方形を比較するメソッド
コンストラクタ:幅と高さを初期化する
答え
-
- class Ractangle
- double width; // 幅
- double height; // 高さ
- // 面積を戻り値とするメソッド
- double getArea ( ) {
- return this . width* this . height;
- }
- // boolean型の面積比較メソッド
- boolean isLarger ( Ractangle r ) {
- if ( this . getArea ( ) > r . getArea ( ) ) {
- return true ;
- } else {
- return false ;
- }
- }
- // 幅と高さを指定するコンストラクタ
- Ractangle ( double x , double y ) {
- this . width = x ;
- this . height = y ;
- }
- }
- class Cons {
- public static void main ( String [ ] args ) {
- Ractangle r1 = new Ractangle ( 11.5 , 1.5 ) ; // インスタンス1生成
- Ractangle r2 = new Ractangle ( 4.5 , 2.5 ) ; // インスタンス2生成
- if ( r1 . isLarger ( r2 ) ) {
- System . out . println ( ” yes ” ) ;
- } else {
- System . out . println ( ” no ” ) ;
- }
- }
- }
実行結果は yes となります。
解説
3つのメソッドを持ったクラスの定義をします。
ここまでがクラスの定義になります。
まずRactangleクラスで幅と高さを少数型の定数に指定します。
double型の変数にします。
- class Ractangle
- double width; // 幅
- double height; // 高さ
1つめのメソッドは面積を戻すgetAreaメソッドです。
この処理の中身は幅と高さの掛け算の結果を戻す(return)というものです。
thisをつけるのを忘れないようにしてください。
- // 面積を戻り値とするメソッド
- double getArea ( ) {
- return this . width* this . height;
- }
- 👆thisを必ずつける!
2つめのメソッドは面積を比較するisLargerメソッドです。
比較の元の方が大きければtrue,そうでなければfalseで返します。
戻り値はboolean型になります。
気を付けなければならないのは引数は必ずRactangleクラスの参照型の変数にすることです。
- // boolean型の面積比較メソッド
- boolean isLarger ( Ractangle r ) {
- if ( this . getArea ( ) > r . getArea ( ) ) {
- return true ;
- } else {
- return false ;
- }
- }
⇓
⇓
- class Ractangle
- double width; // 幅
- double height; // 高さ
次にthis.getAreaで直前のgetAreaメソッドの呼び出しをしています。
同じクラスの中でメソッドの呼び出しをおこなっているということです。
呼び出された(getAreaメソッドの)面積は引数の長方形のインスタンスの面積よりも大きければ(>)trueを返し、そうでなければfalseを返すという機能を実装させたメソッドです。
- if ( this . getArea ( ) > r . getArea ( ) ) {
最後にコンストラクタによって数字を与えます。
気を付けなければならないのは、このメソッドの名前はクラスの名前と一致させるということです。
- // 幅と高さを指定するコンストラクタ
- Ractangle ( double x , double y ) {
- this . width = x ;
- this . height = y ;
- }
- }
引数はdouble型のxとdouble型のyで、幅と高さの指定をします。
- // 幅と高さを指定するコンストラクタ
- Ractangle ( double x , double y ) {
処理は単純に代入するだけです。
- this . width = x ;
- this . height = y ;
では本体側はどうようにこのクラスを動かすのでしょうか。
- class Cons {
- public static void main ( String [ ] args ) {
- Ractangle r1 = new Ractangle ( 11.5 , 1.5 ) ; // インスタンス1生成
- Ractangle r2 = new Ractangle ( 4.5 , 2.5 ) ; // インスタンス2生成
- if ( r1 . isLarger ( r2 ) ) {
- System . out . println ( ” yes ” ) ;
- } else {
- System . out . println ( ” no ” ) ;
- }
- }
- }
まずインスタンスを生成します。
生成すると同時に2つの引数を渡して幅と高さを指定します。
- Ractangle r1 = new Ractangle ( 11.5 , 1.5 ) ; // インスタンス1生成
- Ractangle r2 = new Ractangle ( 4.5 , 2.5 ) ; // インスタンス2生成
この2つのインスタンスが生成されたらそれらを比較します。
- if ( r1 . isLarger ( r2 ) ) {
- System . out . println ( ” yes ” ) ;
- } else {
- System . out . println ( ” no ” ) ;
- }
r1のisLargerがtrueであれば(r1の面積が引数のr2の面積よりも大きければ)yes,そうでなければnoを出力させます。
- // boolean型の面積比較メソッド
- boolean isLarger ( Ractangle r ) {
- if ( this . getArea ( ) > r . getArea ( ) ) {
- return true ;
- } else {
- return false ;
- }
- }
実行結果はyesとなります。