[OSAM]DART言語ベース(8)Class[#3]継承


>継承とは?


継承:子クラスが親クラスのすべての変数と関数を使用できるようにします.
=>BUT親は子供を継ぐことができない!
=>親は複数の子であり、BUT子は1つの親のみである!

>extends,superキーワード


Extends:クラス継承用キーワード=>サブクラスextends親
super:親クラスにアクセスするクラス
class TopingPizza extends Pizza {
  String toping;
  TopingPizza(String bread, String cheese, String toping){
    super.bread = bread;
    super.cheese = cheese;
    this.toping = toping;
  }

> override


override:子クラスで親クラスで定義した関数を再定義するためのキーワード!
※overide自体が親の関数を無効にする行為で、次のコードを再定義!
overide自体はコード再定義ではありません!
@override
親関数名
@override
  void sayPizza(){
    print("피자 이름은 ${this.toping}피자입니다!");
  }
}

>適用

class Pizza {
  String bread;
  String cheese;

  Pizza({String bread, String cheese})
      : this.bread = bread,
        this.cheese = cheese;

  void sayBread() {
    print("${this.bread}로 만든 피자가 나왔습니다!");
  }
  
  void sayCheese(){
    print("${this.cheese}로 만든 피자가 나왔습니다!");
  }
  
  void sayPizza(){
    print("피자가 나왔습니다!");
  }
}

class TopingPizza extends Pizza {
  String toping;
  TopingPizza(String bread, String cheese, String toping){
    super.bread = bread;
    super.cheese = cheese;
    this.toping = toping;
  }
     
  @override
  void sayPizza(){
    print("피자 이름은 ${this.toping}피자입니다!");
  }
}


void main(){
  Pizza pizza = new Pizza(bread : "기본빵", cheese : "기본치즈");
  pizza.sayBread();
  pizza.sayCheese();
  pizza.sayPizza();
  
  TopingPizza ppizza = new TopingPizza("기본빵", "기본치즈","페퍼로니");
  ppizza.sayBread();
  ppizza.sayCheese();
  ppizza.sayPizza();
}