[OSAM] DART 언어 기초(9) Class [#4] 이니셜라이져 키워드

1776 단어 dartOSAMOSAM

> 상속의 특성

※상속은 자식클래스의 내부가 시작하기 전에 부모클래스의 내부가 먼저 실행된다.

class Pasta{
  Pasta(){
    print("파스타");
  }
}
class CreamPasta extends Pasta{
  CreamPasta(){
    print("크림파스타");
  }
}
void main(){
  CreamPasta cp = new CreamPasta();
}
결과값 : 파스타, 크림파스타

결과를 보면 알다시피 CreamPasta의 객체를 생성했을 뿐인데 Pasta의 생성자를 먼저 실행하게 된다.

class Pasta{
  String name;
  Pasta(){
    print("파스타");
    print(name);
  }
}

class CreamPasta extends Pasta{
  CreamPasta(String name){
    super.name = name;
    print("크림파스타");
  }
}

void main(){
  CreamPasta cp = new CreamPasta("리얼크림파스타");
  print(cp.name);
}

결과 : 파스타, null, 크림파스타, 리얼크림파스타

> why null?

1) 처음 리얼크림파스타가 CreamPasta 클래스에 들어가면 바로 Pasta클래스로 넘어가게 된다.
2) 이때 Pasta의 멤버 변수인 name에는 아무런 값이 할당되지 않는다.
3) 그런 상태로 "파스타"를 출력하고 다시 CreamPasta로 돌아오게 된다.
4) 여기서 super.name = name 이라는 코드를 통해서 Pasta클래스의 name값이 할당되면서 cp.name의 값은 리얼크림파스타로 출력이 가능하게 된다.

> 이니셜라이져 키워드

그럼 바로 "리얼크림파스타"를 출력하려면?
=> 이니셜라이져 키워드(:)를 사용하면 된다
★이니셜라이져 키워드를 사용하면 자식클래스에서 부모클래스로 값을 할당할 수 있따!!!!!★

class Pasta{
  String name;
  Pasta(this.name){
    print("파스타");
    print(name);
  }
}
class CreamPasta extends Pasta{
  CreamPasta(String name) : super(name){
    print("크림파스타");
  }
}
void main(){
  CreamPasta cp = new CreamPasta("리얼크림파스타");
  print(cp.name);
}
결과값 : 파스타, 리얼크림파스타, 크림파스타, 리얼크림파스타

CreamPasta(String name) : super(name) 이 코드를 통해서 부모클래스의 멤버변수에 값을 할당해줄 수 있었다.
Pasta(this.name)을 통해서 할당된 값을 가져와서 "리얼크림파스타"를 출력한것이다.

좋은 웹페이지 즐겨찾기