はじめに
【オブジェクト指向】を 【Java = ジャバ】言語で考えてみました。
以下を参照。
スーパークラス
/**
* 抽象クラス
* ⇒ 継承する際は、影響を設定させるため、抽象メソッドを定義
*/
abstract class Person {
// フィールド
private int age; //年齢
private String name; //名前
// コンストラクタ
public Person(int age, String name) {
this.age = age;
this.name = name;
}
// 抽象メソッドの宣言
// ⇒ サブクラスに必ず同じメソッド名の再定義を行わせる。
// getterメソッド
/* 影響を取得する抽象メソッド */
public abstract long getInfluence();
// setterメソッド
/* 影響を取得する抽象メソッド */
public abstract void setInfluence(long influence);
// getterメソッド
/* 年齢を取得するメソッド */
public int getAge() {
return age;
}
// setterメソッド
/* 年齢を設定するメソッド */
public void setAge(int age) {
this.age = age;
}
// getterメソッド
/* 名前を取得するメソッド */
public String getName() {
return name;
}
// setterメソッド
/* 名前を設定するメソッド */
public void setName(String name) {
this.name = name;
}
//Personクラスのdisplay
public void display() {
System.out.println("年齢は " + age);
System.out.println("名前は " + name);
}
}
サブクラス
/**
* 具体的なクラス
*/
public class Influencer extends Person {
// フィールド
private long influence; //影響
// コンストラクタ
public Influencer(int age, String name, long influence) {
/* スーパークラスの age と name 引数のコンストラクタを呼び出す */
super(age, name);
this.influence = influence;
}
//抽象メソッドの実装
@Override
public long getInfluence() {
return this.influence;
}
@Override
public void setInfluence(long influence) {
this.influence = influence;
}
/* @override(オーバーライド) は アノテーション
*
⇒ 上記を記述することで、スーパークラスに同名のメソッドがなければコンパイラがエラーメッセージ出す。
*/
//オーバーライド
@Override
public void display() {
//スーパークラスのメソッドを呼び出す
super.display();
//追加定義部分
System.out.println("影響は " + influence);
}
}
インスタンス
/**
* メインクラス
*/
public class StartClass {
public static void main(String[] args) {
System.out.println("PGM:START");
//Influencerクラスを元にインスタンス化
Influencer y =new Influencer( 31, "則夫", 990000L);
//Personクラスでオーバーライドしたdisplay
y.display();
//Personクラスのsetterメソッド
y.setAge(17);
y.setName("玉姫");
Influencerクラスのsetterメソッド
y.setInfluence(1000000L);
//Personクラスでオーバーライドしたdisplay
y.display();
}
}
実行結果
PGM:START
年齢は 31
名前は 則夫
影響は 990000
年齢は 17
名前は 玉姫
影響は 1000000
オブジェクト指向1
参考文献
Java関連情報サイト様
【JavaDrive】抽象クラスとインターフェース
https://www.javadrive.jp/start/abstract/
【Java】抽象メソッド・抽象クラス
https://zenn.dev/miya_akari/articles/dc58d4a0cb43fe