オブジェクト指向5

##    はじめに

  __<font color="blue">　【オブジェクト指向】</font>を__ __<font color="blue">　【Java = ジャバ】</font>言語で考えてみました。__

##### 以下を参照。
https://qiita.com/nekoozi/items/57b538a88579e78f71b3

# <font color="blueviolet">スーパークラス</font>
```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);
     }

}

```


-------------
# <font color="blueviolet">サブクラス</font>

```java
/**
  * 具体的なクラス
  */
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);



     }

}


```


-------------
# <font color="blueviolet">インスタンス</font>

```java
/**
  *  メインクラス
  */
  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

https://qiita.com/nekoozi/items/2cb1d0ed21fa8f12b652




## 参考文献

Java関連情報サイト様

【JavaDrive】抽象クラスとインターフェース
     https://www.javadrive.jp/start/abstract/



-------------------------------
【Java】抽象メソッド・抽象クラス
     https://zenn.dev/miya_akari/articles/dc58d4a0cb43fe

-------------------------------