はじめに
今回はJavaの「抽象クラス」と「インターフェース」について勉強したことを記載していきたいと思います。
抽象クラス
抽象クラスは、処理を持たない抽象的なメソッドを定義できるクラスのことです。
抽象クラス特徴 | 抽象メソッドを定義することができる |
抽象クラスはインスタンス化できないため継承して使用する | |
抽象クラスを継承したサブクラスは、抽象クラスで定義した抽象メソッドを必ずオーバーライドいなければいけない(抽象クラスを継承した抽象クラスは対象外) | |
抽象メソッド特徴 | 処理を持たないメソッドでオーバーライドして使用する。 |
定義
// 抽象クラス
修飾子 abstract class クラス名 {
// 抽象メソッド
修飾子 abstract 戻り値型 メソッド名(引数);
}
// 継承方法
修飾子 class クラス名 extends 継承元クラス名 {
}
例
package weapon;
public abstract class Weapon {
/**
* 攻撃
*/
public abstract void attackMotion();
}
package weapon;
public class Sword extends Weapon {
/**
* 攻撃
*/
@Override
public void attackMotion() {
System.out.println("斬る");
}
}
package weapon;
public class Bow extends Weapon {
/**
* 攻撃動作
*/
@Override
public void attack() {
System.out.println("打つ");
}
}
インタフェース
インタフェースとは、実体の処理があるメソッドは一つも持たずに使用されるクラスに対しての規格をとりまとめるために使用されます。抽象クラスよりもさらに抽象的な扱いとなる。
インタフェース
|
基本的に抽象メソッドのみ指定する (インタフェースに定義したメソッドは自動的に抽象メソッド「public abstract」となる) |
クラス変数は定数のみ指定する |
|
インスタンス化をすることはできず、implementsすることでインタフェースの規格をクラスへ強制することができる(定義した抽象メソッドを必ずオーバーライドしなければいけない) | |
インターフェースは複数を一度に指定することができる |
定義
// インタフェース
修飾子 interface インタフェース名 {
}
// 使用クラス
修飾子 class クラス名 implements インタフェース名 {
}
例
package Character;
public interface Character {
public static final int MAX_DAMAGE = 9999;
public abstract void attack();
}
package Character;
public class Human implements Character {
/**
* 攻撃
*/
@Override
public void attack() {
System.out.println("攻撃する");
}
}
package Character;
public class Creature implements Character {
/**
* 攻撃
*/
@Override
public void attack() {
System.out.println("攻撃する");
}
}
抽象クラスとインタフェースの違い
抽象クラス | 継承関係の処理の再利用に使用する |
インタフェース | 関係するクラスに対する規格の強制に使用する |
ドキュメント
【公式ドキュメント】
Java SE Specifications (oracle.com)
最後に
Javaの環境構築は、この記事を参照してみてください。
【開発環境構築】VS CodeでJavaを使用するための環境構築を実施する – SEもりのLog (selifemorizo.com)
以上、ログになります。
これからも継続していきましょう!!
コメント