があらのメモ帳

プログラミングで気になったこと

全部publicじゃダメなの?アクセス修飾子について

アクセス修飾子とは、メソッドやメンバ変数、クラスなどにアクセス権を持たせてあげることである

アクセス修飾子の種類は
public     全てのクラスからアクセス可能
protected   同じクラス内、同じパッケージ、サブクラスからアクセス可能
なし     同じクラス内、同じパッケージからアクセス可能
private    同じクラス内のみアクセス可能

他のクラスからアクセス修飾子がなし(デフォルト)のメンバ変数を使おうと思っても「publicじゃないとダメ!」とエラーがでる。

それなら別に全部publicでよくね?

一人でちょっとしたプログラムを書くなら全部publicで問題ない!

しかし…複数で大規模なプログラムを書くとなると話は別でアクセス修飾子は重要になる。
この値を他のクラスから弄くられると正常に動かなくなるみたいな値をprivateにしておくと安心できる。

アクセス修飾子はどう使い分けるの?

基本的にpublicとprivateぐらいしか使わない。(自分だけかもしれないが…)

クラスまたはメソッドの場合
 他のクラスで使うと思うのはpublic、そうじゃないのはprivate
 (クラスの場合は一つのソースファイルに1つしか書けない)

メンバ変数の場合
 定数以外は基本的にprivate

コンストラクタの場合
 基本的にpublic

基本的に見せないで、機能を提供したい所だけ見せる。
こんな感じに自分は使い分けている。

interfaceっているの? 初心者なりに理解したInterfaceの利点について

Javaの勉強中に interface というものにつまずいた。

interface とはこんなの

interface Play {
     void play();
}

中身がないのになぜあるんだ? 無くても変わらないんじゃないの? と思っていろいろ調べてみた。

どうやらこういうことらしい

例えば、生徒というinterfaceがあって、get宿題というメソッドがある。

interface 生徒 {
     public String get宿題();
 }

生徒interfaceを実装(implements)した佐藤君と鈴木さんがいる。

class 佐藤君 implements 生徒 {
     public String get宿題() {
       return "国語の宿題";
 }

class 鈴木さん implements 生徒 {
     public String get宿題() {
       return "数学の宿題";
 }

先生クラスからは、生徒が 誰であっても 宿題を手にすることができる。

class 先生 {
    void 宿題の回収(生徒 生徒){
         生徒の宿題 = 生徒.get宿題();
    }
}

宿題の回収メソッドの引数に生徒クラス型の佐藤君を入れると佐藤君から宿題を手にすることができる。
鈴木さんや新しい生徒が追加されてもメソッドの引数として渡してあげることによって先生は宿題を回収することができる。

つまりどういうこと?

先生は
      「佐藤君宿題を提出してねー」
      「鈴木さん宿題を提出してねー」

って言うより

      「生徒は宿題を提出してねー」

って言う方が楽じゃないか!ということ




(間違えていたらコメントください)