6章 講義

1.クラスとオブジェクト

クラス定義、変数、メソッド、インスタンス化、変数のスコープ、や
コンストラクタ(インスタンス化した時に無条件で呼ばれるもの)、
オーバーロード(同じ名称のメソッドや引数を変えて宣言する)、
コンストラクタのオーバーロード
を一気に説明します。

 

◇インスタンス化 備考

●16行目をTest a;にした場合
⇒宣言のみで初期化されていないためコンパイルエラー
●16行目をTest a = null;にした場合
⇒nullで初期化はされているためコンパイルは成功するが、
Testクラスのメンバ変数、メソッド等を呼び出した際にはNullPointerExceptionエラーが発生する(実行時エラー)
●16行目をnew Test();にした場合
⇒コンパイル成功。ただし変数宣言をしていないので
クラス内メソッドを呼び出す術がないです。
コンストラクタの実行はできます。

◇static

メンバ変数及びメソッドは、実は2種類ある。
① インスタンス(変数):インスタンス化する度に領域を確保する。
② static(変数):複数インスタンス化しても1つしか用意されない。
※staticは呼び出し方が違う。
インスタンス化しなくても呼び出せる。

構文
クラス名.static変数(メソッド)名

 

・アクセスのルール

同一クラス内でstaticメンバ(変数・メソッドのこと)はインスタンスメンバに直接アクセス不可(インスタンス化していればOK)です。
※ちなみに逆はOK。
ex) インスタンスメンバ→staticメンバ

理由
staticメソッドは、特定のインスタンスと結びつかないメソッドなので、

インスタンスがない前提で呼ばれます。

この為、staticメソッドは「特定のインスタンスに結びつく情報」(staticの付かないフィールド・メソッド)は参照できません。
つまり、
・インスタンス変数
・インスタンスメソッド
にアクセスできません。また、
・super
・this
についても、そのインスタンスに結びつく領域であるため、アクセスできません。

 

◇アクセス修飾子

変数、メソッド、コンストラクタの公開範囲を指定するもの

<推奨ルール>
・インストラクタ変数は private
・メソッドは public
※publicクラスは1つのソースファイルに1つのみ。
またこのケースだと、このソースファイルはpublicクラスと同じ名前でなければいけない。

◇オーバーライド と オーバーロード

◯オーバーライド
オーバーライドとは、スーパークラスのメソッドをサブクラスで処理の変更をすること。(使用法が同じなのでユーザーが楽!)

・継承先(サブクラス側)でメソッドを再定義
・同名で引数が同じ
・戻り値は同じか、戻り値の型がサブクラス
・アクセス修飾子が広い
ex)非インスタンスをインスタンス(static)でオーバーライドはできない。

◯オーバーロード

・同クラス内に同名のメソッドやコンストラクタを定義できる。
・引数の並び・型・数が異なる。(戻り値は自由)

 

以上!6章はここまで!問題にチャレンジしてください。