ダートクラスとある単一継承のオブジェクト指向言語では、すべてのオブジェクトは、クラスのインスタンスであり、すべてのクラスはObjectのサブクラスです。
オブジェクト指向プログラミング(OOP)の三つの基本的な機能は次のとおりです。カプセル化、継承、ポリモーフィズム
パッケージ:パッケージには、オブジェクトやクラスの概念の主な特徴です。パッケージ、抽象クラスとしてパッケージ客観的なもの、そして彼自身の性質およびその他のオブジェクトの呼び出しに利用可能な方法の一部で、隠されたプロパティとメソッドの一部しばらく。
継承:オブジェクト指向プログラミング(OOP)言語の大きな特徴は、「継承」されます。継承は、A能力を指す:それは元のクラスの場合には、これらの機能を書き換えて拡張することなく、既存のクラスの機能を使用することができます。
多型:サブクラスのポインタ型は、親ポインタに割り当てられているタイプを可能にする、同じ関数呼び出しは異なる効果を持って行きました。
-
コンストラクタ
// クラス人{ // 文字列名=「ジョン・ドウ」; // int型= 20が年齢である; // // デフォルトコンストラクタ // 者(){ // このメソッドのコンテンツのコンストラクタ関数である印刷(」タイムトリガの例「); // } // 無効PRINTINFO(){ // 印刷( "$ ---- $ {} {this.name this.age}"); // } // } // {Personクラス // 文字列名; // int型年齢; // // デフォルトコンストラクタ // 人(文字列名、int型年齢){ // this.name =名; // this.age =年齢; // } // 無効PRINTINFO(){ // 印刷( "$ ---- $ {} {this.name this.age}"); // } // } クラス人{ 文字列名; int型年齢; / / ので、一般的にすることにより、デフォルトコンストラクタの速記、 人(この .nameの、この.age); 無効PRINTINFO(){ 印刷( "$ ---- $ {} {this.name this.age}" ); } } ボイド)(主{ 人P1は = 新しい新規人物( 'ジョン・ドウ'、20である); p1.printInfo(); 人物P2 = 新しい新人物( 'ジョン・ドウ'、25 ); p2.printInfo(); }
1との違い:コンストラクタのJavaは、コンストラクタ内のダーツをもっと書くことができ、少し異なっています。
クラス人{ 文字列名を、 int型年齢; // デフォルトコンストラクタ速記 者(この .nameの、この.age); Person.now(){ 印刷(「私は名前のコンストラクタをしています」); } Person.setInfo(文字列名前、int型の年齢){ この .nameの= 名前; この .age = 年齢; } 無効PRINTINFO(){ 印刷( "$ ---- $ {} {this.name this.age}" ); } } 無効メイン(){ // VAR DateTime.Now新しい新D =(); //名前のコンストラクタ呼び出しのDateTimeの例 // ;印刷(D) // パーソン新しい新しいP1 =人(「ジョン・ドウ」、20); // クラスの既定のインスタンスは、デフォルトコンストラクタが呼び出される // 者P1 Person.now新しい新=(); // 名前コンストラクタ 人P1 = 新しい新しい Person.setInfo( 'ジョン・ドウ'、30 ); p1.printInfo();
}
2の違い:これらの官民保護されたアクセス修飾子のダーツなし、しかし、我々はプライベートプロパティまたはメソッドとして定義するために_を使用することができます。
:3の違いゲッターとセッター修飾子
クラスのRect { ダブル高さ。 ダブル幅; RECT(この .height、この.width)。 // ゲッター修饰符 エリア{取得 戻る この .height * この.widthを。 } // セッター修饰符 セットareaHeight(値){ この .height = 値。 } } ボイドメイン(){ のRect R =のRect(10.0,5.0 )。 プリント(r.area)。 r.areaHeight = 20.0 。 プリント(r.area)。 }
。違い4:ダーツは、コンストラクタ本体を実行する前に、インスタンス変数を初期化することができます
クラスのRect { int型の高さ。 int型の幅は、 RECT():高さ = 2、幅= 10 { 印刷( "$ {this.height} --- $ {this.width}" )。 } のgetArea(){ 戻り 、この * .heightをこの.widthと、 } } ボイドメイン(){ のRect R = 新規のRect()。 印刷(r.getArea())。 }
-
ダートの静的メンバーと静的メソッド
クラス人{ 静的な文字列名=「张三」; 静的 ボイドショー(){ 印刷(名); } } ボイドメイン(){ プリント(Person.name)。 Person.show(); }
そして、Javaの構文は基本的に同じです。
静的メソッドはできませんアクセス非静的メンバーのみアクセスでき、静的メンバ。
非静的メソッドは、非静的メンバにアクセスすることができます、また、静的メンバーにアクセスすることができます。
-
対象事業者ダート
条件演算子 - ?
クラス人{ 文字列名; int型年齢; 人(この .nameの、この.age); 無効PRINTINFO(){ 印刷( "$ --- $ {} {this.name this.age}" ); } } 無効メイン(){ 人物P; p.printInfo(); // NoSuchMethodError:方法で、 'PRINTINFO'がコールされたヌル ?P .printInfo(); // pは、PRINTINFOメソッドの実装nullでない場合。そうでない場合はスキップします。 }
型変換(Javaで同様のキャスト) - など
.printInfo(人物などのp())。
タイプ判定--is
もし{(pが人物です) ... }
カスケード操作 - ..
p..name = "ジョン・ドウ" ..age = 30 ..printInfo()。