search
教育・子育て

chapter14 クラスの基本形 まとめ 後編

マんタ's icon'
  • マんタ
  • 2021/04/22 23:41

え~今回はchapter14 クラスの基本形 まとめ 後編 です。

 

 コンストラクタのオーバーロード

1.コンストラクタをオーバーロードする

例えばこんな感じです

public Dice(){
	Val= 1;        //目数は1にする
	}

次のように書くと手間がかからないので便利かも?

Dice dice=new Dice(); //目数は1(コンストラクタで1が代入される)

ただ、稀に目数の初期値を指定しなければいけない時もあるので、前回作った引数のあるコンストラクタをやめるわけにはいかないのが現状ですwww

で、

クラスはコンストラクタを2つもつことができます。

これを、 コンストラクタのオーバーロード といいます。

12章でメソッドのオーバーロードについて説明しましたが、コンストラクタも条件は同じで引数構成(引数の型、数、並び順)が違えばいくつでもコンストラクタを作っても大丈夫なのです。

 

POINT  コンストラクタのオーバーロード

引数構成(引数の型、数、並び順)が違うコンストラクタを複数作成できる。

 

 

では、実際にコンストラクタのオーバーロードをやっていこうと思います。

起動する方のプログラムはこんな感じになります。

で、起動するとこんな感じになるはず・・・・・

 

次にデフォルトコンストラクタの説明から・・・

デフォルトコンストラクタ

プログラマがコンストラクタを作成してない場合にJavaコンパイラが自動的に作成するコンストラクタを デフォルトコンストラクタ といいます。

デフォルトコンストラクタは引数がなく難の処理もしないコンストラクタ。

 

次にデフォルトコンストラクタの規則について

POINT  デフォルトコンストラクタの生成規制

 1つでもコンストラクタを作ると・・・・・・・

デフォルトコンストラクタは自動作成されなくなる。

※引数のないコンストラクタも必要という場合は、プログラマが引数のないコンストラクタをオーバーロードする必要がある。

 

他のコンストラクタを利用するコンストラクタ

package exercise;
public class Dice {
int val;
String color;
 
public Dice (int val,String color) {
 this.val = val;
 this.color = color;
}
public Dice(String color) {
 this(1,color);
}
public Dice() {
 this(1,"白");
 
}
public void play() {
 val=(int)(Math.random()*6)+1;// ここにコードを挿入
}
}

thisを使うことでこのように簡単にコンストラクタが書けるようになります。

一番引数の多いコンストラクタを呼び出し値の設定を簡単にしているのがポイント。

記述のミスをなくす意味でも、コンストラクタをオーバーロードするときはこの書き方を。

 

thisは1行目に

this()が結構出てきましたが、

this()は『コンストラクタ定義の1行目に書かなければならない』

という規則があり、次のような書き方はできません。

public Dice(){

	System.out.println("コンストラクタ呼び出し");
	
	 this(1,"白");<===========1行目に書いてないのでコンパイルエラー
}

    

1.カプセル化

カプセル化とは、外部のクラスに公開するメンバと非公開にするメンバを分けて、

クラスの独立性を確保することです。

代表的なものが、データ隠蔽です。

フィールド変数を外部からアクセスできないようににして、フィールド変数の値を操作する必要がある場合に備えて、専用のメソッドを提供する。

これがデータ隠蔽です。

具体的には、フィールド変数にprivate修飾子を付けて、他のクラスからアクセス不可にする。

代わりに、フィールド変数の値を取り出したり、フィールド変数に値をセットするために、専用のメソッド(アクセサメソッド)を用意します。

アクセサメソッドには、データを取得するゲッターと、データをセットするセッターがある。

では、カプセル化したクラスを見てみます。

package exercise;
public class Dice {
private int val;
private String color;
 
public Dice (int val,String color) {
 this.val = val;
 this.color = color;
}
public Dice(String color) {
 this(1,color);
}  
public Dice() {
 this(1,"白");
 
}
public void play() {
 val=(int)(Math.random()*6)+1;// ここにコードを挿入
}
 
public int getVal() {
 return val;
}
public void setVal(int val) {
 this.val=val;
}
public String getColor() {
 return color;
}
public void setColor(String color) {
 this.color=color;
 
}
 
}

プログラムは上の通りですが

下の図で説明しますwww

パソコンの場合は ctrlと+で拡大できますので見にくい人は拡大してご覧ください。

private修飾子によって他のクラスからはvalにアクセスできなくなりました。

private修飾子は、クラス内のメンバだけがアクセスできるようにする修飾子です。

下の青枠で囲ったところはアクセサメソッドです。

フィールド変数の値を取得するゲッターと値を設定するセッターがありました。

外部のクラスが値を取得したりセットするときに使います。

よって次のような文ではアクセスができません。

System.out.println(dice.val); 

privateメンバにアクセスできないことを不可視といい、

存在しているが見えないので使えないという意味です。

エラーメッセージなどでよく使われます。

POINT① thisはメソッドでも使える

 thisはコンストラクタとインスタンスメソッドでも使えます。 

★ゲッター、セッターともにアクセス修飾子としてpublicを付けなければいけません。

publicは条件を付けず、自由にアクセスできるという意味のアクセス修飾子です。

まとめると次の通りです。

POINT② データ隠ぺいによるカプセル化の手法

①フィールド変数にprivate修飾子を付けて、外部からは利用できなくする。

②public修飾子を付けたアクセサメソッド(セッターとゲッター)を作成する。

アクセス修飾子

privateが出てきたのでアクセス修飾子について。

アクセス修飾子はそれを付けた対象にアクセスできる条件を規定する。

主なアクセス修飾子

★private

 同一クラス内に定義されたメソッドコンストラクタからだけアクセスできる。

★デフォルトアクセス(修飾子なし)

  同一クラス内に定義されたメソッドコンストラクタからだけアクセスできる&他のクラスでもソースコード同じパッケージ内にあれば、そのメソッドコンストラクタからアクセスできる。

★public

   条件なし自由にアクセスできる。

デフォルトアクセス

デフォルトアクセスにすると、ソースコードが同じパッケージ内にある暮らすメソッドやコンストラクタからもアクセスできる。

今回最後にアクセス修飾子による制限の図を説明してchaputer14を終わりにしようと思います。

アクセス修飾子による制限

上の図はアクセスの制限を図で示したもので、

private→デフォルト→publicの順番でアクセス制限が緩くなることが分かります。

 

ここまでご覧いただきありがとうございました。

BY マんタ

参考書は__________________________________

新わかりやすい Java

川場 隆  Kawaba Takashi

秀和システム

 

Supporter profile icon
Article tip 1人がサポートしています
獲得ALIS: Article like 3.75 ALIS Article tip 1.10 ALIS
Article registration Article registration
マんタ's icon'
  • マんタ
  • @25kit6
4月突入!春らしくなってきたけどなんか寒い(><)油断すると風邪ひきそうだから服装もそこそこにしないとね(^O^)

投稿者の人気記事
コメントする
コメントする
こちらもおすすめ!
Eye catch
トラベル

無料案内所という職業

bansu 2019/06/11
Like token Tip token
84.20 ALIS
Eye catch
他カテゴリ

オランダ人が語る大麻大国のオランダ

Jimmy 2018/12/21
Like token Tip token
46.20 ALIS
Eye catch
他カテゴリ

警察官が一人で戦ったらどのくらいの強さなの?『柔道編』 【元警察官が本音で回答】

ふたひい@web3 2020/05/16
Like token Tip token
114.82 ALIS
Eye catch
クリプト

約2年間ブロックチェ-ンゲームをして

kaya 2021/10/06
Like token Tip token
61.20 ALIS
Eye catch
クリプト

続・NFT解体新書・デジタルデータをNFTで販売するときのすべて【実証実験・共有レポート】

otakucoin 2021/04/23
Like token Tip token
6.37 ALIS
Eye catch
クリプト

ジョークコインとして出発したDogecoin(ドージコイン)の誕生から現在まで。注目される非証券性🐶

昆布森ちゃん 2021/01/19
Like token Tip token
38.31 ALIS
Eye catch
他カテゴリ

防犯意識 マーキング 下書き供養④

しろしろ 2021/04/20
Like token Tip token
24.07 ALIS
Eye catch
ビジネス

海外企業と契約するフリーランス広報になった経緯をセルフインタビューで明かす!

Semapho 2021/09/14
Like token Tip token
16.10 ALIS
Eye catch
クリプト

NFT解体新書・デジタルデータをNFTで販売するときのすべて【実証実験・共有レポート】

otakucoin 2021/03/29
Like token Tip token
121.79 ALIS
Eye catch
クリプト

Bitcoinの価値の源泉は、PoWによる電気代ではなくて"競争原理"だった。

CryptoChick 2020/03/07
Like token Tip token
159.32 ALIS
Eye catch
他カテゴリ

機械学習を体験してみよう!(難易度低)

nonstop-iida 2020/03/04
Like token Tip token
124.82 ALIS
Eye catch
教育・子育て

【科学】アリストテレスにデカルトにニュートンに…みな光に取り憑かれた~光学の発展~

KTAG 2021/09/25
Like token Tip token
23.75 ALIS