/ * オブジェクト指向プログラミング(OOP)の三つの基本的な機能は次のとおりです。カプセル化、継承、ポリモーフィズム、 カプセル化:パッケージには、オブジェクトやクラスの概念の主な特徴です。隠されたプロパティとメソッドの一部しばらくパッケージ、抽象クラスとしてパッケージ客観的なもの、そして彼自身の性質と呼んで他のオブジェクトに利用可能な方法の一部、。 継承:オブジェクト指向プログラミング(OOP)言語の大きな特徴は、「継承」されます。継承は、そのような能力を意味する:それは元のクラスの場合には、これらの機能を書き換えて拡張することなく、既存のクラスの機能を使用することができます。 多型:サブクラスのポインタ型は、親ポインタに割り当てられているタイプを可能にする、行っ同じ関数呼び出しは異なる効果を持っています。 ダートすべてがすべてのオブジェクトはObjectクラスから継承され、オブジェクトです。 ダートは、単一継承クラスとオブジェクト指向言語を使用することで、すべてのオブジェクトは、クラスのインスタンスであり、すべてのオブジェクト・クラスは、サブクラスである クラス一般プロパティおよびメソッドから構成されています。 * / メインボイド(){ リスト 一覧 = 新しい新しい リスト(); リスト。のisEmpty; リスト( 'バナナ'を.add ); リスト( 'バナナ1' .add ); マップM = 新新しいマップ()。 M [ "ユーザ名"] = "张三" 。 M .addAll({ "年齢":20 }); メートル。isEmpty; オブジェクト A = 123 。 オブジェクト V = 真; プリント(A) 印刷(V); }
/ * ダートは単一継承クラスを使用してオブジェクト指向言語され、すべてのオブジェクトは、クラスのインスタンスであり、すべてのクラスは、Objectのサブクラスです * / クラス人{ 文字列の名前は=「ジョン・ドウ」; int型の年齢 23は=である; 無効GETINFO(){ // 印刷( "$ ---- $名年齢"); 印刷( "$ ---- $ {} {this.name this.age}" ); } 無効SETINFO(年齢はint){ この .age = 年齢; } } 無効メイン(){ // インスタンス化 //新しい新VARのP1 =人(); //印刷(p1.name); // p1.getInfo(); 人物P1 = 新しい新しい人(); // 印刷(p1.name); P1.setInfo(28 )。 P1。情報を取得(); }
// クラス人{ //文字列名=「ジョン・ドウ」; // int型= 20は年齢である; //デフォルトコンストラクタ// //者(){ このメソッドのコンテンツのコンストラクタ関数です//印刷(」タイムトリガの例「); //} //無効PRINTINFO(){ //印刷( "$ ---- $ {} {this.name this.age}"); //} //} //王呉Zhangsanlisi // Personクラス{ //文字列名; // int型年齢; //デフォルトコンストラクタ// //人(文字列名、int型の年齢){ // this.name =名; // = this.age年齢; //} //無効PRINTINFO(){ //印刷( "$ ---- $ {} {this.name this.age}"); //} //} クラス人{ 文字列名; int型年齢; // デフォルトコンストラクタは、速記 者(。this.name、この;年齢) 無効PRINTINFO(){ 印刷( "$ ---- $ {} {this.name this.ageを}" ); } } ボイドメイン(){ 人P1 = 新しい新規人物( 'ジョン・ドウ'、20である); P1。PRINTINFO(); 人物P2 = 新しい新規人物( 'ジョン・ドウ'、25 ); P2。PRINTINFO(); }
/ * コンストラクタの内部DARTより多くを書くことができます * / クラス人{ 文字列名; int型年齢; // デフォルトコンストラクタ速記 者(。this.name、この年齢); 人。今、(){ 印刷(「I名前のコンストラクターズ); } 人 .setInfo(文字列名、int型の年齢){ この .nameの= 名前; この .age = 年齢; } 無効PRINTINFO(){ 印刷(「$ ---- $ {} this.name this.age} { " ); } } メインボイド(){ //VARさd =新しいDateTime.now(); //は、 名前のコンストラクタ呼び出しのDateTimeのインスタンスを作成 ; //印刷(D) //パーソン新しい新しいP1 =人( 'ジョン・ドウ'、20);クラスの//デフォルトのインスタンスをコールは、デフォルトコンストラクタであるとき //人物P1 =新しいPerson.now() ; // 名前のコンストラクタ 人P1 = 新新 Person.setInfo( 'ジョン・ドウ'、30 ); P1。PRINTINFO(); }
輸入'のlib / Person.dart' ; ボイドメイン(){ 人物P1 = 新しい Person.setInfo( '李四1'、30 ); P1。PRINTINFO(); }
Person.dart
クラス人{ 文字列名; int型の年齢; // デフォルトコンストラクタは、速記 者(。this.name、この年齢); 人を。(今){ 印刷(「私は名前のコンストラクタをしています」); } 人 .setInfo(文字列名前、int型の年齢){ この .nameの= 名前; この .age = 年齢; } 無効PRINTINFO(){ 印刷( "$ ---- $ {} {this.name this.age}" ); } }
/ * ダートおよびその他のオブジェクト指向言語と同じではありません、データがラインでこれらの変更官民保護されたアクセスではありません が、我々はプライベートプロパティまたはメソッドとして定義するために_を使用することができます。 * / インポート 'libに/ Animal.dart' ; 無効メイン(){ アニマルA = 新しい新しい動物( '犬,. 3 ); 印刷(A. 項目GetName()); .execRun(); // 間接呼び出しプライベートメソッド }
クラスアニマル{ 文字列 _name; // プライベート属性は、 年齢をint型; // デフォルトコンストラクタの速記 動物(。this._name、この年齢); 無効PRINTINFO(){ 印刷(「$ ---- $ {} this._nameをthis.age} { " ); } 文字列のgetName(){ 返すこれを。_name; } _run(){無効 印刷のプライベートメソッドである'(); } execRun(){ この ._runを(); // クラスメソッド内で互いを呼び出します } }
// クラスのRect { // int型の高さ。 // int型の幅; //のgetArea(){ 戻り// this.height * this.width。 //} //} //クラスのRect { // NUM高さ; // num個の幅; //のRect(this.height、this.width)。 //領域(){ 戻り// this.height * this.width。 //} //} //ボイドメイン(){ //のRect R =新規のRect(10,4)。 //プリント( "面积:$ {r.area()}"); //} //クラスのRect { // NUM高さ; // num個の幅; //のRect(this.height、this.width)。 // {面積を得る this.height * this.widthを返す//; //} //} ボイドメイン//(){ //新しい新しい= R&LTのRectのRect(10,2); //印刷( "エリア:$ {r.area}"); // 直接アクセス属性モードアクセス注目領域を呼び出す // } クラスのRect { NUM高; NUM幅; のRect(ここ。.height、この幅) エリアGET { 返す。this.height *この幅; } SET areaHeight(値){ この .height = 値; } } メインボイド(){ のRect R&LT = 新しい新規のRect(10,4 ); // プリント( "領域:$ {r.area()}"); 。r.areaHeight = 6 ; プリント(R&LT 領域); }
// ダーツ我々はコンストラクタの前に、実行中のインスタンス変数本体を初期化することができる クラスのRect { ; int型の高さ ; int型の幅 のRect()高さ= 2、幅= 10:{ 印刷(「$ --- $ {} this.height this.width} { " ); } のgetArea(){ 返す。this.height *この;幅 } } ボイドメイン(){ のRect R&LT = 新しい新;のRect() プリント(R&LT )のgetArea() }