理解の多深いレベル(JAVA)

もっと漠然とした印象は、あなたがマルチステートおよび多状態の一般的な理解を持っていると仮定すると、私はあなたが再びそれをくし取るために、彼らはその後、堪能理解できないようです。

以下のための多形の前提条件

継承を持っている1

2.親クラスをオーバーライドするサブクラスの方法

サブクラスへの親クラスへ3.参照

場合プログラムは次のように記述することができます。

JAVA:
public abstract class Person(){
	private int age = 10;
	private String name = "wyw";
	public void speak(){}
	
}
// 多态条件一:继承
public abstract class Man extends Person(){
	private int age = 40;
	private String name = "hsc";
	private String beard;
	// 多态条件二:重写
	@override
	public void speak(){
		System.out.println("带着胡子讲话")
	}
}
// 多态条件一:继承
public abstract class Woman extends Person(){
	private int age = 20;
	private String name = "kb";
	private String longHair;
	// 多态条件二:重写
	@override
	public void speak(){
		System.out.println("带着长发讲话")
	}
}
// 实例化,
// 多态条件三:父类引用指向子类对(即Person指向多个子类对象)
Person man1 = new Man();
Person Woman1 = new Woman();

ここでは新しいもので、サブクラスのオブジェクトは、ある受け取るために、親タイプ、それが最終的にそれが親オブジェクトまたはサブクラスのオブジェクトを数えていることは非常に奇妙であるが、実際には、言って人気のあるオブジェクトのサブクラスで、されない父親の名前であります息子は、私の息子は、行動の本質であるが、私の父はのマントに身を包んだ
あなたは息子のオブジェクトへのポインタ型を持つ親という理解へのポインタを使用することができ++ C。

実装の多型

プログラムは、設定されている場合は継承された多型の特定の実装を実際にサブクラスが親のタイプの非静的メソッドのメンバーよりも優先されます使用し
ています:

man1.age;//打印出来是10
man1.speak();
woman1.speak();

1サブクラスは、直接呼び出すことができ、親クラスとサブクラスでメンバ変数をオーバーライドはいない
2つのサブクラスもでき、非静的メソッドを呼び出すに係る親クラスをオーバーライド
3。欠点あなたは、独自のサブクラスとメンバー変数は親クラスのメソッドで定義されていない使用することはできません

上記で述べた缶用として呼び出しが親クラスオーバーライドされたメソッドをサブクラスしないで定義されていない親クラスのサブクラスでメソッドを使用することはできませんめったに見られない現実の生活の中でこれらの2つの場合、も、その理由を発生することができました。
7スポーク設計原理の必須モード:

マルチステートネクタイのデザインパターン7つの原則

前記内部リヒター置換原則依存関係逆転の原則は、ある多型の反射します。
そして、開閉原理がされてカプセル化された表現を。具体的には、リヒターと原則依存性について何かを言います。

リヒター置換原則:

リヒターは、数学的な定義を置き換え、非常に複雑であり、単純に置かれた:あなたはソフトウェアエンティティを使用する場合は、親である、その後、親クラスのサブカテゴリーに使い続けるために、ソフトウェアは、少しの誤差ではありません。これは、観測された現象です。
実際には、反対はこれです:満たしている場合はリヒター置換原則:私たちはプログラムを書くとき、サブクラスは親クラスを置き換えることができなければならないことを、すべてのサブクラスは親クラスで宣言されなければならない、またはサブクラスは親クラスを実装する必要がありますすべてのメソッドが宣言しました言い換えれば、私たちは親を設計するとき、あなたはサブクラスが可能親クラスのすべてのメソッドを実装することができます親クラス抽象十分に行う必要があります
我々が持っていると言うにはダチョウスズメを、我々はデザイン鳥の親クラスは、非常に良いではありませんが鳥飛んで動作し、飛ぶしないダチョウのサブクラスがあるため、それは、サブクラスがいっぱい達成することができないとして、親クラスの振る舞いは、我々は少し抽象セット親クラスとして動物を安全に呼ばれます。
これは、とあったリヒターの交換開閉の原理は継承された可能性になりました。
試してみてください親クラスは抽象クラスやインタフェースに設計されたように、サブクラスは親クラスを継承するか、インタフェースの親を実装そして、ランニング、親クラスで宣言されたメソッドを実装する親クラスのインスタンスのサブクラスのインスタンスを置き換える、我々は簡単にAを追加することによって、新しい機能を追加し、オリジナルのサブクラスのコードを変更することなく、同時に、システムの機能を拡張することができます達成するための新しいサブクラス。

そのため、親クラスリファレンスのサブクラスのオブジェクトの多型がオーバーライドしないサブクラスで親クラスのメソッドを呼び出すことができ、このような状況は、実際のプロジェクトで発生することができ、すべてのサブクラスの親クラスが実装する、または拡張する必要がありますセックスが悪くなり、親クラスが真の多重化されていません。

サブクラスがメソッド完全**親クラスを継承しますが、親クラスの追加が定義されていない、ことも可能であり、エンジニアリング、多くのそのような例がある親は、良いデザインではないので、それであってもよいです。**

JAVA:
public abstract class Birds(){
	private int age = 10;
	private String name = "wyw";
	public void speak(){}
	public void fly(){}
	
}
// 多态条件一:继承
public abstract class Ostrich extends Birds(){
	private int age = 40;
	private String name = "hsc";
	// 多态条件二:重写
	@override
	public void speak(){
		System.out.println("鸵鸟讲话")
	}
}
// 多态条件一:继承
public abstract class Sparrows extends Birds(){
	private int age = 20;
	private String name = "kb";
	// 多态条件二:重写
	@override
	public void speak(){
		System.out.println("麻雀讲话")
	}
	
	@override
	public void fly(){
		System.out.println("麻雀飞行")
	}
}
// 实例化,
// 多态条件三:父类引用指向子类对(即Birds指向多个子类对象)
Birds ostrich1 = new Ostrich();
Birds sparrows1 = new Sparrows();
ostrich1.fly();// 由于子类未重写父类的方法。fly向上转型去寻找父类方法
sparrow1.fly();// 麻雀子类重写了父类方法,fly向下转型去调用子类重写的方法

それは注意する必要があります。

1.手順は、上記の親クラスのサブクラスが完全に状況は避けなければならないことに気づいていないため
2.サブクラス空腹親クラスが完全にメソッドを実装することができれば、それがなければならない親子関係を切り離す使用して、継承するのではなく、依存関係重合性組成物を

依存関係逆転の原則:

すなわち、プログラム内のすべての依存関係が抽象クラスまたはインタフェースで終了する、このフラグは、オブジェクト指向です。
プログラムする際の核となるアイデア:高レベルのモジュールは、その抽象的に依存すべきどちらの根底にあるモジュールに依存してはならない、抽象的には、特定の実装の詳細に依存すべきではない、と詳細が抽象的に依存しなければなりません。
他の人気トークは、抽象クラスやインタフェースによってプログラムされている場合は疎結合を達成するために、各クラスは独立性を達成することができ、修正困難な衰退を作ります。
例えば、三つのモジュールが存在する。1.ヒトモジュール 2.モジュールトロット 3.オランウータンモジュール前記実行モジュールは、想定およびチンパンジーが通りである層モジュール責任ある行動ロジック、トロットとギャロップモジュールとしてボトムモジュールが責任があります実装。
今私はよ、人間とオランウータンモジュールと呼ばれるトロットモジュール、アプローチ、それは根本的な原因高レベルのモジュールのモジュールに依存します、私はスピードをジョギングこの男を変更したいときにモジュールをジョギング、変更へのモジュラーアプローチは、人々の変化であるが続き、以上の変更を伴う変更の方法の実装。
正しいアプローチ:私はジョギングやスプリントとのオランウータンにする必要がありますの形でインタフェースのための抽象化を達成するために、低速、高速二つのモジュールをしましょう、と私は人間とオランウータンだ特定の実装インタフェースを実現することができるコールするだけの必要性トップを持ち上げたが、根本的に依存していますモジュールは、そう、彼らは疎結合を達成するために抽象インタフェースに依存していることを、変更だけの時間がかかることがモジュールを変更する必要があります。

いくつかの操作が起こることを許さ工学だから、私は個人的に多型唯一の欠点は、単にメンバ変数は、サブクラスと呼ばれることができないことも感じています。

詳細な原則デザインパターン7(添付):

オブジェクト指向のソフトウェア設計のアイデアを使用するには、7の合計というルールを、次の、彼らは以下のとおりです。

1.単一責任の原則(シングル責任の原則)

各クラスには、一つのことをやってに焦点を当てるべきです。

2.リヒター置換原則(リスコフの置換原則)

スーパークラスの存在は、サブクラスを交換することができる場所。

3.依存性逆転原理(依存性逆転原理)

実現時にできるだけ抽象、それは特定の実装に依存しません。

4.インターフェイス分離原則(インタフェース分掌の原則)

これはかなり大きな総インターフェースを提供するよりも、クライアントのために別のインタフェースを提供するために可能な限り小さくなければなりません。

5.デメテル(デメテルの法則)

また、知識の最小の原則として知られている、ソフトウェアエンティティが他のエンティティとの少しの相互作用としてでなければなりません。

6.開閉原則(オープンクローズ原理)

拡張のためのオープン、修正のため閉鎖。

7.合成/重合多重原理(コンポジット/骨再利用原理CARP)

、多重化を達成継承の使用を最小限に抑え、ポリマー/合成を使用してみてください。原則:別のクラスでは、対象におけるクラス。

公開された19元の記事 ウォンの賞賛4 ビュー488

おすすめ

転載: blog.csdn.net/qq_35050438/article/details/104072868