English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Javaの抽象クラスとインターフェースについての個人的な理解

今日はJavaの抽象クラスとインターフェースについての理解を一つにまとめてみました。以下に参考内容を含めています:

一、抽象クラス

1定義:

public abstract class クラス名{}

Java言語ではすべてのオブジェクトはクラスで記述されますが、すべてのクラスがオブジェクトを記述するわけではありません。私は抽象クラスが同一種の事物の公共部分を高度に抽出することを理解しています。この公共部分には属性と行動が含まれます。例えば、牛、羊、猪の公共属性は毛があり、公共行動は哺乳です。そのため、この公共部分を抽象化して哺乳クラスを作成し、毛と哺乳の属性と行動を含めます。牛、羊、猪が哺乳クラスを継承すると、哺乳の機能が得られます。機能を実現する方法は自分で実装する必要があります。

2Java言語ではすべてのオブジェクトはクラスで記述されますが、すべてのクラスがオブジェクトを記述するわけではありません。私は抽象クラスが同一種の事物の公共部分を高度に抽出することを理解しています。この公共部分には属性と行動が含まれます。例えば、牛、羊、猪の公共属性は毛があり、公共行動は哺乳です。そのため、この公共部分を抽象化して哺乳クラスを作成し、毛と哺乳の属性と行動を含めます。牛、羊、猪が哺乳クラスを継承すると、哺乳の機能が得られます。機能を実現する方法は自分で実装する必要があります。

(1特徴

(2)Abstractキーワードで修飾されたクラスは抽象クラスです;

(3)抽象メソッドには実装はできません。それがあれば、コンパイルエラーが発生します;

(4)抽象クラスには自分のメンバ変数とメンバメソッドを定義できます;

(5)抽象クラスを継承する子クラスは、抽象クラス内のすべての抽象メソッドを実装する必要があります。それができなければ、その子クラスも抽象クラスと定義される必要があります;

(6)抽象クラスはインスタンス化できません。

3、上記の規定が実際にその通りであるかを検証する

これはWordで編集した検証表で、ここに画像として貼り付けました:

上図の検証結果から、その理論はすべて正しいです

二、インターフェース

1定義:

public interface 接口名{}

インターフェースはメソッドを提供するために使われます。私の理解では、これは複数のクラスの公共行動を高度に抽出することです。例えば、すべての動物の公共行動は食事と睡眠です。その場合、この2つの行動を抽出してインターフェースにパッケージ化すると、特定の動物がこの行動を実行する必要があるときに、そのインターフェースを呼び出し、自分のクラス内で具体的な実装を行うだけで済みます。この理解では抽象クラスとの違いがわかりにくいかもしれません。そのため、以下の例を見てみましょう。この2つの行動を抽象クラスに置くと、さらに「登る」という行動があります。その場合、爬虫類、例えば蛇がこのクラスを継承すると、食事、睡眠、登る这3つのメソッドを実装し、食事、睡眠、登るの機能を持つことになります。しかし、飛行する動物、例えば鳥がこのメソッドを継承すると、食事、睡眠、登るの機能も持つことになりますが、登るはその機能ではありません。これは少し意味が通じませんが、食事と睡眠のみのインターフェースを継承すると、食事と睡眠の基本機能が得られます。そして、登りや飛行は抽象クラスに抽象化して、必要に応じて継承し、必要な機能を実装するだけで良いのです。

2特徴:

(1インターフェースには自分のメンバ変数を持つことができますが、暗黙的にpublic static finalと指定されます。また、public static finalののみが許可されます。インターフェース内のすべてのメソッドは抽象メソッドであり、暗黙的にpublic abstractと指定されます。

(2)インターフェースは抽象メソッドのみを定義し、具体的な実装は行いません;

(3)インターフェースを実装するクラスは、インターフェースで定義されたすべてのメソッドを実装する必要があります;

3、上記の理論が正しいかどうかを確認します

同様に、上記の理論がすべて正しいと確認されました!

三、抽象クラスとインターフェースの違い:

1、抽象クラスには独自のメンバメソッド及びその具体的な実装が含まれることができます;インターフェースには抽象メソッドのみが含まれます;

2、抽象クラスには様々な種類のメンバ変数が含まれることができます;インターフェースのメンバ変数はpublic static finalのみです;

3、一つのクラスは抽象クラスを1つだけ継承できますが、複数のインターフェースを実装できます;

4、抽象クラスには静的ブロックと静的メソッドが含まれることができます;インターフェースには静的ブロックと静的メソッドを定義することはできません;

一つのクラスは抽象クラスを1つだけ継承できますが、複数のインターフェースを実装できます

まず、2つの抽象クラスを定義します:一つはMummals哺乳類、もう一つはCrawler爬行類です

/**
 * @createtime 2017年3月17日曜日 朝10:33:27
 * @description 哺乳類 
 */
public abstract class Mammals {
	public String foods;
	public abstract void nurse();
	public void eat(String food){
		this.foods = food;
		System.out.println("吃"+foods);
	}
}
/**
 * 
 * @createtime 2017年3月17日曜日 朝11:23:09
 * @description 抽象クラスを定義します--爬行クラス
 */
public abstract class Crawler {
	public abstract void crawl();
}

次に、2つのインターフェースを定義します:一つはBaseActionの基本インターフェース;もう一つはSpecialActionの特殊インターフェースです

/**
 * 
 * @createtime 2017年3月17日曜日 朝11:03:42
 * @description 基本行動のインターフェースとして定義します
 */
public interface BaseAction {
	public String name = "";
	public void eat();
	public void sleep();
}
/**
 * @createtime 2017年3月17日曜日 朝11:24:56
 * @description 特殊行動を実装するためのインターフェースを定義します
 */
public interface SpecialAction {
  public void study();
}

次に、基本クラスPeopleを定義し、Mummalsクラスを継承し、BaseActionインターフェースとSpecialActionインターフェースを実装します。

/**
 * @createtime 2017年3月17日曜日 朝11:25:48
 * @description 普通のクラスを定義する--人間は、哺乳類を継承し、基本的なインターフェースと特別なインターフェースを実装しています
 */
public class 人間 extends 哺乳類 implements BaseAction,SpecialAction{}}
	@Override
	  public void 学ぶ() {
		// TODO 自動-生成されたメソッドスチブ
	}
	@Override
	  public void 食べる() {
		// TODO 自動-生成されたメソッドスチブ
	}
	@Override
	  public void 睡眠() {
		// TODO 自動-生成されたメソッドスチブ
	}
	@Override
	  public void 护士() {
		// TODO 自動-生成されたメソッドスチブ
	}
}

子クラスは複数のインターフェースを実装することができます

最後に、基本的なクラス人間が、MammalsクラスとCrawlerクラスを同時に継承するようにします

/**
 * @createtime 2017年3月17日曜日 朝11:25:48
 * @description 普通のクラスを定義する--人間は、哺乳類を継承し、基本的なインターフェースと特別なインターフェースを実装しています
 */
public class 人間 extends 哺乳類,クレイラー{
	@Override
	  public void 护士() {
		// TODO 自動-生成されたメソッドスチブ
	}
}

まとめ

これで、本稿で軽く触れたJavaの抽象クラスとインターフェースについての個人的な理解が全てです。皆様に役立つことを願っています。興味がある方は、本サイトを参照してください:

Springでbeanの継承と抽象のコード例

Hibernateの核心思想とインターフェースの概要

javaのインターフェース(interface)及び使用方法の例

不十分な点があれば、コメントをいただければ幸いです。皆様のサポートに感謝します。

声明:本文の内容はインターネットからネットワークで提供されています。著作権は原著者に帰属します。インターネットユーザーによって自発的に提供された内容であり、本サイトは所有権を持ちません。人工的な編集は行われていません。また、関連する法的責任を負いません。著作権に関する問題がある場合は、メールを送信してください:notice#oldtoolbag.com(メールを送信する際、#を@に変更してください。報告を行い、関連する証拠を提供してください。一旦確認がついたら、本サイトは侵害を疑う内容をすぐに削除します。)

おすすめ