1.オブジェクト指向
Javaはオブジェクト指向言語です。オブジェクト指向(OOPすなわちオブジェクト指向プログラミング)は、そのすべてが対象として見ることができる、という考えです。私たちは、一例として、動物と同様のアナロジーを見て、動物はクラスとして見て、物事のクラスの総称として見ることができます。トラ、ライオン、または人とすることができる...これは、そのオブジェクトの動物のこのクラスの具体的な実装です。動物の行動を実行し、食べなければならない、我々はこれらの属性のインスタンスである、例として、目と鼻と耳をする方法を見ることができます。すべて、オブジェクト指向の考え方のすべては、一般的なルックシンプルですが、ハードの種類の深い理解、コードレベルの設計とアーキテクチャでOOPプログラマの程度を理解するために、完全に把握するために、探査やプログラミング経験のかなりの数の長い時間がかかりますこれらは密接に関連しています。
2.オブジェクト指向機能
2.1継承
継承はオブジェクト指向の継承メカニズムの基本的な特徴の1階層のクラスを作成することができますです。継承サブクラスオブジェクト(インスタンス)インスタンスのフィールドとメソッドは、親クラス、同じ親クラス挙動を有するサブクラスから親クラスまたはサブクラス継承メソッドを有するように、特性と親クラスの挙動継承サブクラスです。図と同様に、以下:
2.2パッケージ
パッケージは、オブジェクトのプロパティと実装の詳細を非表示にのみ制御リードにパブリックインターフェイスを開き、プログラム属性のアクセスレベルを変更することである抽象データが得られると(又は機能)に作用する有機全体を形成して、即ち有機合成のソースコードデータと操作データが「クラス」、データクラスのメンバである機能を形成します。
パッケージの目的は、セキュリティと簡素化プログラミングを増強することで、ユーザーがだけの使用に特定のアクセス権への外部インタフェースを介して、特定の実装の詳細を知る必要がない
クラスのメンバー。
2.3ステート以上
同じ現象の異なる多形形態または複数の形態を有する能力。同じクラスのインスタンス(オブジェクト)の方法を指すは、異なる状況において異なる形態を有します。多型の異なる内部構造を有するオブジェクトが同じ外部インターフェイスを共有できるようにします。異なるオブジェクトごとに異なる特定のアクションが、しかし、一般的なクラスを介して、彼ら(これらの操作は)同じように呼び出すことができ、この手段。
2.3.1多型の利点:
- タイプ間の結合関係を排除します
- 代替性
- スケーラビリティ
- インタフェースのセックス
- 柔軟性
- 単純
多型の存在のための3つの必要条件:継承オーバーライド(後の親クラスから継承した親クラスのメソッドの再定義サブクラス)親クラスのサブクラスオブジェクトへの参照
注:オブジェクト指向の概念と3の特徴、主な概念であるが、しかし、実際にそれが再設計パターンと意志の背後にある設計原理を詳細に説明するために、この概念についての蓄積+感情の長い期間になることです理解します。
この段落はから取られているこのブログ
抽象クラスとインターフェース間の3の類似点と相違点
共通して3.2
- インスタンス化できません。
- すべてのメソッドは、唯一のインタフェース抽象クラスインターフェースの実装または抽象クラスの実装クラスとサブクラスは、後にインスタンス化することができます
3.2の違い
- インターフェースで定義された抽象メソッドは、メソッドのいずれかの抽象クラスを実装することができない方法でも実施することができる、抽象メソッドを定義します。
- 単一継承、実現しています。複数のインターフェースを実装することができ、あなただけの抽象クラスを継承することができます。
- インターフェイス機能は、抽象クラスの所属と強調したことを強調しました。
- インターフェイスは、すべてのメンバ変数
public static final
静的はもちろん、初期化されなければならない、変更することはできません。すべてのインタフェースメソッドはあるpublic abstract
公共の抽象的な。そして、コンストラクタを持つことはできません。抽象クラスは、より多くの自由、そして、あなたが通常の方法を持つことができることができない抽象メソッドを持つことができ、ほとんど普通のクラスであり、あなたにはありません。
3.3抽象クラスとインタフェース焦点
抽象クラスは、3.3.1を定義します
抽象クラスは、多くの場合、問題領域の分析を特徴付けるために使用され、デザイン描かれた抽象化は異なるように見えますが、本質的に同じ抽象的な概念コンクリートのシリーズです。
3.3.2役割抽象クラス
1、非表示を隠すために使用されるタイプの、我々は、固定の集合の挙動の抽象記述を構築することができ、可能な動作は、任意の特定の実装を有することができます。この抽象的な記述は、抽象クラスです。(参考多型)
拡大するため2、オブジェクト行動機能
任意の可能な性能のグループは、すべての可能なサブクラスを具現化モジュールは、彼、固定された抽象クラスに依存しているので、モジュールは、抽象クラスを操作することができます変更することはできません。同時に、このモジュールの機能的な行動を展開し、この抽象クラスによって派生。(オープンクローズドの原則を参照してください)
3.3.3インタフェースの定義
エンティティは、その抽象化の一種の外部(別のエンティティであってもよい)に独自のインターフェースを提供するために意味、それが他のエンティティとの外部相互作用内部の方法に影響を与えることなく変更することができ、内部および外部の通信動作を分離するための方法。
3.3.4インタフェースの役割
理由はJavaの単一継承なので、サプリメントとして必要Quxianjiuguo継承。
プログラムモジュールは、結合を低減、契約を硬化させました。多くの機能を分割するには、契約や依存性に応じて実現。(依存性逆転原理)
インターフェースのヘルプ標準化コードを定義します。(界面剥離原理)
例4
私たちはより深い印象を見て動物を与える比較例のその他のあいまいな概念
4.1インタフェース
レッツは、ライフサイクル・インターフェースのライフサイクルを作成し、すべての動物は、ライフサイクルを持って、私たち抽象ようなインターフェースので、
package com.hqa;
public interface LifeCycle {
/**
* 生
*/
void born();
/**
* 老
*/
void old();
/**
* 病
*/
void ill();
/**
* 死
*/
void die();
}
4.2抽象クラス
抽象クラスの動物を作成します。
package com.hqa;
public abstract class Animal implements LifeCycle{
@Override
public void born() {
System.out.println("出生了...");
}
@Override
public void old() {
System.out.println("老了...");
}
@Override
public void ill() {
System.out.println("生病了...");
}
@Override
public void die() {
System.out.println("死了...");
}
}
4.3ネコクラス
package com.hqa;
public class CatKindAnimal extends Animal{
/**
* 构造函数
*/
public CatKindAnimal(String name){
this.name = name;
}
/**
* 姓名
*/
public String name; //共有属性
/**
* 花色
*/
private String color; //私有属性
/**
* 拥有技能 爬树
*/
public void tree(){
//TODO ..
}
}
4.4魚
package com.hqa;
public class FishKindAnimal extends Animal{
/**
* 拥有技能游泳
*/
public void swim(){
//TODO ..
}
}
4.5不滅のクラス
package com.hqa;
public class SuperAnimal extends Animal{
/**
* 神仙是长生不死的,可以通过重写die方法来实现
* 但是这样做并不是一个好的设计,后面我们会讲到接口隔离原则
*/
@Override
public void die() {
System.out.println("神仙不会死...");
}
}
クラスには、次の種類の変数を含めることがあります。
ローカル変数:メソッドで定義された変数は、コンストラクタが呼ばれるか、文ブロックのローカル変数です。変数宣言および初期化は、方法の終了後、変数は自動的に破壊される、プロセスです。
メンバー変数:クラスのメンバ変数が定義されている、メソッド本体以外の変数。オブジェクトがインスタンス化されるときに、この変数が作成されます。メンバー変数は、文ブロックのクラスメソッド、クラス固有の方法および構成をアクセスすることができます。
クラス変数:クラスのクラス宣言でも変数、体外方法が、静的な型として宣言する必要があります。
4.6例
オブジェクトが作成したクラスです。Javaでは、新しいオブジェクトを作成するために、キーワードnewを使用しています。:オブジェクトを作成するには、次の三つのステップが必要です
宣言を:オブジェクト名とオブジェクト・タイプを含め、オブジェクトを宣言します。
例:オブジェクトを作成するために、新しいキーワードを使用します。
初期化:使用して新しいオブジェクトを作成するには、そのオブジェクトを初期化するコンストラクタを呼び出します。
の例で見てみましょう:
package com.hqa;
public class Test {
public static void main(String[] args) {
//实例化了一个名叫tom的猫科动物
CatKindAnimal cat = new CatKindAnimal("TOM");
cat.born();
cat.die();
//实例化了一个神仙
SuperAnimal sup = new SuperAnimal();
sup.die();
}
}
ランは、次の結果を見ることができます:
出生了...
死了...
神仙不会死...