オブジェクト指向(Object Oriented:OO)
  ・オブジェクトを中心にしてシステムをとらえる。(操作手順とは異なる。)
  ・オブジェクト指向では、「カプセル化」「継承」「ポリモフィズム」などの概念を用いる。
  ・オブジェクト
現実世界における実態や概念
個別に認識できる存在
オブジェクトは「属性」と「振る舞い(操作)」を持つ。
  ・属性
オブジェクトの特徴や特性を表す。
  ・振る舞い
オブジェクトの機能や働きを表す。
  ・カプセル化
オブジェクトの属性とその属性に対応する操作を一体化
他のオブジェクトから属性を直接アクセスさせない仕組み
公開された操作(アクセッサメソッド)を通してのみアクセスできる。
  ・継承
  ・ポリモフィズム
  ・現実世界における実態
物理的に存在し、名前を付けて呼べる物
  ・現実世界における概念
存在が目に見えなくても、概念として名前を付けて呼べる物

クラス
  ・世の中に複数存在する類似オブジェクトの中から共通する属性や振る舞いを抽出
  ・概念として名前を付ける。(抽象化する。)
  ・抽象化の度合い
オブジェクトをどう見るかどう扱うかで、クラスとして抽出する内容が異なる。

ソースファイルの形式
  ・ソースファイルは「クラス」単位で構成(例、Sample.java) class BlockSample { // クラス名ブロック{} public static void main(String[] args) { // mainメソッドインデント System.out.println("Hello World"); // ステートメントコメント } }
Javadocコメント
  ・クラスやクラス内に定義したメンバの直前の行にそれぞれの説明を記述
  ・「/**」から「*/」で囲まれた領域がコメント
  ・Eclipseによる補助:「/**」Enter

Javadoc
  ・Javadocコメントをもとに、クラスなどの仕様書を生成する仕組み
  ・JDKに、Javadocを生成するツールを用意
Eclipseの機能を使って生成できる。

クラスのインスタンス化
  ・インスタンス(instance)
クラスを基に生成されたオブジェクト(実態)
  ・インスタンス化:クラスを基にオブジェクトを生成すること。「new演算子」を用いる。
  ・生成されたインスタンスは、そのクラスの型の変数に代入して使う。
データ型 変数名 = new データ型()
  ・インスタンスのメンバーには「.」を用いてアクセスする。
変数名.メンバー = "abcd"

コンストラクタ
  ・新しいオブジェクトが適切な初期状態で始まることを保証するために使用
  ・クラスの中に定義するメンバの一つ
  ・そのクラスがインスタンス化されるタイミングで実行される。
  ・コンストラクタには、オブジェクトの生成時に行いたい処理を記述する。
コンストラクタを利用し、フィールドの初期化もできる。
  ・コンストラクタが記述されないときは「デフォルトコンストラクタ」が暗黙的に付加
  ・オーバーロードにより、引数が異なるコンストラクタを複数定義できる。
  ・this()によるコンストラクタ呼び出しができる。
コンストラクタ内から同一クラス内にある別のコンストラクタを呼び出せる。
this()によるコンストラクタ呼び出しは、コンストラクタ処理の先頭に記述

フィールドの初期化
  ・フィールドに初期値が明示的に代入されていない場合、次の値で初期化される。
データ型 フィールドの初期値 
 byte, short, int, long  0
 fioat, double 0.0
 char '\u0000' (空文字)
 boolean false
 参照型 null

継承(インヘリタンス、inheritance)
  ・既に定義されているクラスを基に、拡張や変更を加えた新しいクラスの定義
オブジェクト指向の汎化/特化を実現
スーパークラス(親クラス):継承の元になるクラス
サブクラス(子クラス):継承で新たに定義したクラス
サブクラスは、extendsキーワードを用いて定義
  ・サブクラスのサブクラス
Javaでは、言語仕様上スーパークラスを一つしか指定できない。(単一継承)
サブクラスを継承してサブクラスを定義できる。
  ・すべてのクラスのスーパークラス(Objectクラス)
Java標準クラスライブラリ(Java API)に定義されたjava.lang.Objectクラス
すべてのクラスは、Objectクラスを継承する。
extendsキーワードを用いないクラスは、暗黙的にObjectクラスを継承
  ・final修飾子のついたクラスは継承できない。
  ・継承関係のあるクラス間でも、アクセス修飾子の制限を受ける。
スーパークラスのprivateメンバには、サブクラスから直接アクセスできない。
  ・サブクラスのインスタンス化とコンストラクタ
スーパークラスのコンストラクタ処理後、サブクラスのコンストラクタ処理
コンストラクタ処理の先頭で引数無しのスーパークラスのコンストラクタ処理
  ・super()によるコンストラクタ呼び出し
super()により、スーパークラスの任意のコンストラクタを明示的に呼び出せる。
サブクラスのコンストラクタの処理の先頭に記述

オーバーライド
  ・スーパークラスで定義されたメソッドをサブクラスで再定義
スーパークラスのメソッドと同じメソッド名・引数で、異なる振る舞いを定義
  ・オーバーライドしたメソッドの戻り値の型はスーパークラスと同一か、継承された型
  ・オーバーライドしたメソッドの修飾子
スーパークラスに定義されたメソッドよりもアクセスレベルを低くできない。
final修飾子のついたメソッドはオーバーライドできない。
  ・@Overrideアノテーションの付加で正しくオーバーライドしているかコンパイラがチェック

superキーワード
  ・スーパークラスに定義されたメンバーを明示的に指し示すためのキーワード
  ・thisキーワードは、キーワードが書かれているクラスのインスタンス自身を指す。

参照型の型変換
  ・サブクラスのインスタンス
スーパークラス型のオブジェクトとして扱える。(暗黙的な型変換:アップキャスト)
  ・アップキャストしたオブジェクト
再びサブクラスの型にキャストできる。(明示的な型変換:ダウンキャスト)
ダウンキャストには、キャスト演算子「()」を利用
  ・参照型変数を通してアクセスできるメンバ
同じ参照型変数の型(クラス)で定義されているメンバ

抽象クラス
  ・継承されることを前提のクラス
  ・インスタンス化できないクラスとして定義
  ・抽象クラスには、オーバーライドされることを前提とした「抽象メソッド」を定義できる。
具体的処理を持たないため、ブロック{}は記述できない。
抽象メソッドには、private/static/final修飾子を付けられない。
  ・抽象クラス、抽象メソッドには「abstract修飾子」を付ける。
  ・具象クラス・実装クラス・実現クラス:抽象クラスを継承してインスタンス化できるクラス
  ・具象クラスの役割と目的
「クラスの雛型」としての役割を持つ。
抽象クラスを継承するサブクラスに抽象メソッドのオーバーライドを強制できる。
  ・具象クラスの利用
抽象クラスを継承したサブクラスを定義
サブクラスで、抽象クラスの抽象メソッドをオーバーライドする。
サブクラスのインスタンスを抽象クラスの型で扱い、ポリモフィズムを実現する。

Exceptionクラス
  ・チェック例外
可能性のあるコードは例外処理がないとコンパイルエラー
  ・非チェック例外
例外処理が適切でない場合、例外発生時に強制終了
  ・代表的な例外クラス
    代表的な例外クラス 主な例外発生理由
 非 ArithmeticException ゼロ除算など
 非 ArrayIndexOutOfBoundsException 不正なインデックスで配列にアクセス
 非 NullPointerException 参照先がnullのオブジェクトのメンバ呼び出し
  java.io.IOException 何らかの入出力に関する例外

Stringクラス
  ・String型は文字列を「"」で囲うことでインスタンスが生成される。
  ・文字列の操作を行うメソッドがあらかじめ定義

Mathクラス
  ・基本的な数値処理を行うためのメソッドを含む。
  ・Static修飾子の付いたフィールド・メソッドから構成
  ・2つのint値のうち大きい方を返す。
static final max(int a, int b)

ラッパークラス
  ・8種類の基本データ型を、それぞれ参照型で表したクラス
  ・オートボクシング機能
基本データ型と参照型の相互変換を自動的に行う。