I.概要
- 継承(キーワードが伸びます)
- ミックス ミックスイン(キーワードで)
- インタフェース(キーワード実装)
これら三つの関係が存在するが、シーケンスの前と後がある場合があります。
拡張 - >ミックスイン - >実装
extensのフロント、ミックスインとして途中で、実装ついにと、
第二に、戦闘
2.1継承(延び)
継承ルールでダーツ:
- サブクラスは、親クラスを継承するキーワード拡張します
- サブクラスは継承コンストラクタを親クラスの可視プロパティとメソッドを継承しませんが
- サブクラスは、親クラスのゲッターとセッターを書き換えることができます
- スーパー、使用@Overrideをオーバーライドするサブクラス
- スーパークラスを呼び出すために、サブクラス、使用のスーパー
- サブクラスは、非プライベート変数の親クラスを継承することができます
栗は持ち上げました:
クラス人{
// パブリック変数
の文字列名。
年齢かどうか;
// プライベート変数
文字列の_gender;
// 関数のクラス名
の人(この .nameの、この.age);
// publicメソッド
無効PRINTINFO(){
印刷(" $ {this.name} --- $ {this.age} " )。
}
作業(){
(印刷" $ {} this.name仕事... " );
}
}
クラスのWebは人を{拡張します
ウェブ(文字列名、NUM年齢):スーパー(名前、年齢);
ラン(){
印刷(' 実行' );
super.work(); // クラスメソッド呼び出しから親クラス
}
// メソッドは、親クラスのオーバーライドする
@Override //が書き込み@Overrideと組み合わせたときに、親クラスのメソッドをオーバーライドするお勧めすることはできませんあなたを書くことができますが
、ボイド(){PRINTINFO
(プリント" :$ {this.name} ---年齢:名前をthis.age $ {} " );
}
}
メイン(){
ウェブW = N-EWウェブ(' ジョン・ドウ'、20である);
// w.printInfo();
w.run()。
}
2.2混合ミックスイン(と)
ミックスイン中国語手段における混合は、クラスにあると混合他の機能。ダートはで使用することができるミックスインの多重継承と同様の機能を実現するミックスインの使用条件、ダートのバージョンと一緒に変更されている、私はここDart2.x使用であることを特徴とするミックスインの条件は:
- (1)ミックスインのクラスのみObjectから継承することができ、あなたは他のクラスから継承することはできません
- (2)ミックスインのクラスはコンストラクタを持つことはできません
- (3)クラス缶ミックスインの複数のミックスインのクラス
- (4) ミックスイン継承され、NORインターフェースが、新しい機能ではありません
- 特定のコードを参照してください。
クラス人{
文字列の名前。
年齢かどうか;
人(この .nameの、この.age)。
PRINTINFO(){
印刷(' $ {this.name} ---- $ {this.age} ' );
}
無効実行(){
(印刷する「パーソンファイル名を指定して実行」)。
}
}
クラスA {
文字列情報 = 「これはAです」。
ボイドprintA(){
(印刷" A " )。
}
無効実行(){
印刷(「Aファイル名を指定して実行」)。
}
}
クラスB {
ボイドprintB(){
印刷(" B " )。
}
無効実行(){
印刷(「Bファイル名を指定して実行」)。
}
}
クラスCはB、A {を持つ人を拡張します
C(文字列名、NUM年齢):スーパー(名前、年齢);
}
ボイドメイン(){
VARの C = 新しい新しい C(' ジョン・ドウ'、20 );
c.printInfo();
// c.printB();
// プリント(c.info)。
c.run();
}
2.3インターフェース(実装)
フラッターにはインターフェイスではないが、フラッタ各クラスは、定義されたすべてのクラスのメンバ変数とメソッドが含まれて暗黙のインタフェースです。あなたはAPIのAを持っているしたいのですが、Aに達成しているしたくないクラスA、クラスBがある場合は、インタフェースA、クラスA.クラスBの道具として配置する必要があり
、それはフラッターに:クラスがインタフェースであり、
- インタフェースのメソッドは、クラスのインターフェイスのメソッドであるとしてクラスを使用する場合は、あなたが@Overrideを追加したいとき、あなたは再実装サブクラスは、サブクラスの実装に必要
- クラスがインターフェイスとして使用する場合、クラスのメンバ変数はまた、サブクラスで実装する必要があります。元メンバー変数プラス@Overrideで
/ *
ダーツクラスは、複数のインタフェースを実装します。
* /
抽象 クラスA {
文字列の名前。
印刷();
}
抽象 クラスB {
printB();
}
クラスC器具A、B {
@オーバーライド
文字列の名前。
@オーバーライド
プリント(){
印刷(' printA ' );
}
@オーバーライド
printB(){
// TODO:printB実装
リターン はnullを。
}
}
ボイドメイン(){
CはC = 新しいC();
c.printA();
}