抽象クラスとインターフェース

またまた頭がこんがらがってきたので整理。

抽象クラスが中身の設計だとしたら
インターフェースは外部の設計

抽象クラスが概念としたら
インターフェイスは機能

どちらも実装・継承した先のクラスであいまいな定義を確定させなければならない。

抽象クラス

抽象クラスbaseは抽象メソッドdispName()を持っている。
※抽象メソッドが1つでも含まれているクラスは、クラスそのものが抽象クラスになる
※抽象クラス・抽象メソッドの先頭には「abstract」を付ける。
(以下のコードは 
 XYZ社製造の製品 の中に 製品A 製品B がそれぞれ含まれる。という概念を表している。)

abstract class base{
  abstract public void dispName();

  public void dispCompany(){
    System.out.println("XYZ社製造の製品です");
  }
}

class seihinA extends base{
  public void dispName(){
    System.out.println("製品Aです");
  }
}

class seihinB extends base{
  public void dispName(){
    System.out.println("製品Bです");
  }
}

機能の確定は extends「継承」

インターフェイス

Javaで考えると、かの有名なStringクラスのクラス定義を見てみると、

public final class String
  implements java.io.Serializable, Comparable, CharSequence
{

・Serializable
・Comparable
・CharSequence
の3つが実装されていることがわかる。

実は、StringBufferクラスでもCharSequenceインターフェースを実装しているので、同様にlength()メソッドが利用できる。
CharSequenceインターフェースの実装は次の通り。

public interface CharSequence {
    int length();
    char charAt(int index);
    CharSequence subSequence(int start, int end);
    public String toString();
}

インターフェースは足し算ができる(抽象クラスだと、複数の継承はNG)。

package javaexample;
interface A{
    void showA();
}
interface B{
    void showB();
}
interface C{
    void showC();
}
public class SimpleTesting implements A, B, C{
    public static void main(String[] args){
        SimpleTesting st = new SimpleTesting();
        st.showA();
        st.showB();
        st.showC();
    }
    @Override
    public void showA() {
        System.out.println("Interface A");
    }
    @Override
    public void showB() {
        System.out.println("Interface B");
    }
    @Override
    public void showC() {
        System.out.println("Interface C");
    }
}

A,B,Cそれぞれのインターフェイスを実装したSimpleTestingクラスは、
showA(),ShowB(),ShowC()メソッドを実装している。
つまり、それぞれを表示するための機能を持っている。
※インターフェイスのメソッドはabstractキーワードの付いていない抽象メソッドと同じ

機能の確定は implements「実装」

良さげな説明サイト
継承と実装の違い インターフェースについて
extends継承とimplements実装の違いについて質問です ```ここに言語を入力 コード public class Player{ int winCount; Random r

このサイトの回答「1」マウスの例が理解しやすいかもしれない

コメント

  1. googletest より:

    It’s very trouble-free to find out any matter on net as compared to textbooks, as I found this piece of writing at this web site.

タイトルとURLをコピーしました