LoginSignup
6
2

More than 5 years have passed since last update.

【Java初学者】抽象化とインターフェースについて

Posted at

概要

抽象化インターフェースの復習として投稿させて頂きます。

抽象化

上位モジュールにおいて、下位モジュールに共通実装するメソッドや変数を宣言し、実装は下位モジュールに任せる。
また、抽象化したクラスはインスタンス生成を行えない。

・抽象化を行うことのメリット
- オーバーライドのし忘れ防止
- 何もしない処理との区別をつける
- 意図しないインスタンス生成の防止

Human.java
public abstract class Human{
  private String name;
  public Human(String name){
    this.name = name;
  }
  public String getName(){
    return name;
  }
  public void setName(String name){
    this.name = name;  
  }
  //共通したメソッドを宣言し実装は下位モジュールに任せる
  public abstract void talk();
  //何もしないメソッド
  public void tmp(){}
}
Japanese.java
public class Japanese extends Human{
  public Japanese(String name){
    super(name);
  }
  @Override
  public void talk(){
    System.out.println("こんにちは");
  }
}
American.java
public class American extends Human{
  public American(String name){
    super(name);
  }
  @Override
  public void talk(){
    System.out.println("Hello");
  }
}

Main.java
public class Main{
  public static void main(String[] args){
    //Human human = new Human("山田太郎");
    //インスタンス生成出来ない為、コンパイルエラー

    Japanese jp = new Japanese("山田太郎");
    jp.talk();    //こんにちは
    American en = new American("TaroYamada");
    en.talk();    //Hello

  }
}

インターフェース

インターフェースでは、抽象化と同様共通実装するメソッドを宣言し、インターフェースを継承したクラスに実装を任せることが出来る。しかし、フィールドに関しては抽象クラスと扱いが異なる。

インターフェースの特徴
- 基本的にフィールドは一つも持たない
- 全てのメソッドは抽象メソッドとなる。

インターフェースにおいて基本的にフィールドを実装することは許されていないが、public static finalがついたフィールドだけは宣言することが出来、インターフェースに型名から変数宣言を始めると自動的に付加される。再代入不可のfinal修飾子が付いているため、変数宣言と同時に初期化を行う必要がある。

また、メソッドに関して、インターフェースに宣言できるメソッドはpublicかつabstractなものに限定され、戻り値の型から宣言した場合は自動的に付加される。

Creature.java
public interface Creature{
  //public static final double PI = 3.14;
  double PI = 3.14; // 自動的にpublic static finalな変数となる。

  //public abstract void breath();
  void breath();  //自動的にpublic abstractなメソッドとなる。
}

まとめ

未だ、継承を用いた開発経験が少ないため、メリットの恩恵を受けづらいというのが正直な感想。

6
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2