생활코딩

Coding Everybody

코스 전체목록

닫기

상속과 생성자

수업소개

생성자가 있는 클래스를 상속할 때 상위 클래스의 생성자를 실행해야 합니다. 그 방법에 대해서 알아봅니다. 

 

 

 

강의

 

 

소스코드

https://github.com/egoing/java-inheritance/commit/179c452c4b2a782f97fc395d7366af426d782e1e

class Cal{
    int v1,v2;
    Cal(int v1, int v2){
        System.out.println("Cal init!!");
        this.v1 = v1; this.v2 = v2;
    }
    public int sum(){return this.v1+v2;}
}
class Cal3 extends Cal{
    Cal3(int v1, int v2) {
        super(v1, v2);
        System.out.println("Cal3 init!!");
    }
    public int minus(){return this.v1-v2;}
}
public class InheritanceApp {
    public static void main(String[] args) {
        Cal c = new Cal(2,1);
        Cal3 c3 = new Cal3(2, 1);
        System.out.println(c3.sum()); // 3
        System.out.println(c3.minus()); // 1
    }
}

 

댓글

댓글 본문
  1. 이정왓
    {this.v1+v2;}
    {this.v1-v2;} > 중괄호 안에 세미콜론 주의
  2. 이정왓
    this와 super 수업을 들으셨으면 알다시피 this는 자기 자신을 가리키는 코드입니다.
    this. 을 씀으로써 클래스의 멤버들을 쉽게 부르거나 정의할 수 있습니다. 이클립스에서 this. 쓰면 알아서 어떤 코드를입력할거냐고 물어보기도 하고 this.로 정의 하면 때문이죠.

    이건 제가 헷갈려서 써놓은건데 참고하셔도 괜찮을거 같아요.
    -
    초기작업을 위한 생성자를 만들고 생성자에 대한 매개변수를 int v1, int v2로 받았잖아요?
    그 매개변수를 this.v1 this.v2 로 대입을 해줌으로써 외부로부터 입력받은 값은 이제 Cal클래스, 즉 내 클래스의 매개변수이다 라고 딱 정의한거나 마찬가지라고 보시면 돼요.

    그래서 Cal 클래스의 sum 메소드에서는 따로 매개변수를 받을 필요없이 this.v1 + v2 로 return 값을 작성하면 되는거죠.

    그러면 그냥 v1+v2로 입력해도 되지 않으냐? 라고 생각 하실 수 있는데, Cal은 부모 클래스로서 자식클래스에게 본인의 멤버들을 상속합니다. 여기서 볼 수 있는 것은 자식의 minus 메소드입니다.
    Cal3생성자에서 매개변수로 받은 v1과 v2를 이제 super(v1, v2); 로 넘기면 부모클래스에 있는 생성자로 v1과 v2가 들어가게되는거겠죠? super는 부모 를 가리키는 말이니까.

    부모클래스인 Cal을 상속받으니 Cal3의 minus 메소드는 그러면 따로 "또 this로 정의할 필요없이" this.v1 - v2 로 리턴할 수 있게 되는겁니다.

    초기작업을 구축함으로써 서로서로 편리함을 주고받는 모습이라고 생각하시면 될거같아요!
    대화보기
    • 맘마단
      public int sum(){return this.v1+v2;} 여기서 this를 넣어주는 이유는 뭔가요 ?
    • hyuna lee
      감사합니다.
    • thebluerat
      2020년 7월 7일
    • 넘무
      감사합니다
    • 코딩하는라이언
      항상 잘 보고 있습니다
    버전 관리
    egoing
    현재 버전
    선택 버전
    graphittie 자세히 보기