【抽象クラス】
継承元のクラス(スーパークラス)で必ずオーバーライドさせたいメソッドを指定。
*抽象メソッドには処理を書かない!(メソッド名だけ定義された状態)
*オブジェクトは作れない!
1 |
abstract メソッド名(引数, 引数, ...); |
<抽象クラスの継承>
抽象メソッドをオーバーライド!
(もしくは、継承したクラスも抽象クラスにする)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<span class="red">//抽象メソッドが1つでもあるクラスは必ず「abstract」クラスの前に記述 abstract</span> class base{ //抽象メソッドを指定(継承した場合は必ずオーバーサイドさせる) <span class="red">abstract</span> public void name(); public void company(){ System.out.println("AAA会社の商品です"); } } class A extends base{ public void name(){ System.out.println("商品Aです"); } } class B extends base{ public void name(){ System.out.println("商品Bです"); } } |
【instanceof演算子】
左辺と右辺をくらべオブジェクトのクラスが一致してるか調べる。
戻り値:boolean型、
左辺と右辺のクラスが一致 → 「true」 を返す
1 2 |
オブジェクトの変数名 instanceof クラス名<b> </b> |
【インターフェイス】
・内容に抽象メソッドと定数しか持てない!
・複数のインターフェイスを実装 (implements
)できる!
・別のインタフェースを多重継承 (extends
) できる!
*メソッドには自動的に修飾子 abstract public
がつく!
*インターフェイスの中で宣言したフィールドは「定数」として扱われる!
(自動的に修飾子 final public static
がつく)
<インターフェイスの書き方>
1 2 3 4 5 |
//インターフェイスの修飾子は「public」のみ! public interface インターフェイス名 { //「abstract <code>public</code>」を書かなくても抽象メソッドとして扱われる! 戻り値の型 メソッド名(); } |
<インターフェイスの実装>
*インターフェイス名の前に「I」を記述!
1 2 |
class クラス名 implements Iインターフェイス名1, Iインターフェイス名2{ } |
<インターフェイスを拡張>
*インターフェイスの場合は複数のインターフェイスを基に継承可能!
1 2 |
interface サブインターフェイス名 extends スーパーインターフェイス名1, スーパーインターフェイス名2 { } |
【パッケージが異なるクラスの利用】
1 |
import パッケージ名.クラス名(パッケージの階層を全部書く); |
【修飾子のまとめ】
<クラス・インターフェイス>
1 2 3 |
無指定 → 同じパッケージのみ使用可 public → 異なるパッケージからも使用可 |
<メンバ・コンストラクタ>
1 2 3 4 |
無指定 → 同じパッケージのみ使用可 public → 全てのクラスから使用可 private → 同じクラス内のみ使用可 protected → 継承関係にあるサブクラスと(同じパッケージのクラス)から使用可 |