20.12.03

민주·2021년 1월 17일
  1. 상속의 정의
    - 상속은 내가 없는 것을 부모에게 물려 받아서 원래 내 것처럼 사용하는 것이다
    - 부모클래스에서 private 접근 필드를 갖는 멤버는 상속이 불가능하다
    - 자바는 상속을 딱 하나만 받을수 있다(사람이 포유류랑 조류에 둘 다 속하지 않는 것처럼)

    - 부모클래스에서 birth 메서드와 eat 메서드를 만들어주었다

    - 3 : Mamal을 상속받겠다는 의미, 처음 클래스 만들때 superclass로도 상속가능

    - Person 클래스를 호출하여 객체화 시켜주었지만 상속받았기 때문에 부모클래스 객체화 없이
    부모 클래스에 있는 메서드도 사용가능

  2. 상속의 특징
    - 상속은 부모 클래스의 멤버를 내것처럼 사용하는것
    - 상속은 하나만 가능하다
    - 상속의 키워드는 extends다.
    - 그래서 부모클래스를 따로 객체화 하지 않는다
    - 사실은 자식클래스를 객체화 하기 전에 부모 먼저 객체화가 되는것이다
    - 자식 키워드 객체화시 부모 객체 초기화도 가능하다

    - 생성자를 만들어줄때는 부모생성자가 제일 먼저 호출되는데 생략 가능하다


    - 자식클래스인 Child를 객체화 시키는 경우 자식클래스 안에 부모클래스 호출이 제일 먼저 일어난다
    - 출력값 :

  3. super()생략 못하는 경우

    - 생성자를 만들 때 인자값이 있게 만듦



    - 부모클래스에서 생성자를 만들 때 인자값을 부여 했으므로 super()를 생략 못하고 인자값을 부모의 생성자와 맞춰줘야한다.
    - 이 경우 자식이 부모의 멤버를 초기화 할 수 있는것이다.
    - 11 : 자식객체에 저장되는 것이다

  4. override
    - 부모 클래스의 멤버를 쓰고 싶은데 아쉽거나 수정하고 싶을 때 사용. 상속관계에서만 일어날 수 있다.
    - alt + shift + s 누르면 사용가능한 키워드 나온다
    - 면접에서 오버로드랑 오버라이드 차이점 많이 물어본다. 하지만 둘은 완전히 다른 개념

    - 부모 클래스

    - 10 : 부모클래스에 있는 메서드를 변경해주었다.
    - 14 : 컨트롤키를 누르고 어디의 메서든지 알고싶은경우 그 변수를 클릭 하면 그 클래스로 넘어간다
    - final이 붙은 메서드는 부모클래스에 있는 메서드라고 하더라도 오버라이드 할수 없다.

  5. 다형성
    - 자식객체가 부모객체 형태의 변수에 들어갈 수 있기 때문에 같은 부모를 상속받은 클래스는 같은 타입으로 들어갈 수 있다

    - ChildOne~Four는 각각 같은 부모클래스를 가지고 있다
    - 각각 자식 클래스를 객체화를 시킨뒤 부모클래스의 메서드를 사용하고 싶은경우 일일이 변수를 지정해줘야하는 어려움과
    코드도 계속 변경해줘야하는 어려움이 있다.( 자원성의 이득 )

    - 여기서 다형성을 이용하여 부모클래스의 변수 하나를 지정해준다
    - 이 부모 형태의 변수를 이용해 모든 자식클래스들을 객체화 시켜줄 수 있다
    - 이 때 자식이 부모로 들어 가는거기 때문에 묵시적 형변환이 일어난다
    - 그래서 변수 하나를 가지고 돌려 쓸 수 있지만, 같이 들어가 있는 것은 아니고 계속 변하는 것이다

  6. promotion

    - 위의 그림처럼 상속을 시켜줬을 경우이다
    - 묵시적 형변환은 자식클래스가 부모 클래스로 들어가는것을 의미하는데 최상위에 있는 부모 클래스까지 가능하다
    ○ 예 : Cat은 Mammal에도 속하고 Vertevrate에도 속한다.
    - 14 ~ 19 : 그래서 4개의 자식 클래스들을 척추동물에 넣어 객체화가 가능 한것이다.
    - 21 ~ 24 : 최상위 부모클래스가 같다고 해서 그 최상위의 다른 부모 클래스로 들어갈 수는 없다.
    - 면접 질문 : promotion과 casting 차이 ★
    ○ promotion , casting 은 상속관계에서만 일어남
    ○ promotion : 자식이 부모로 들어감
    ○ casting : 부모가 자식으로 들어감 ( 포유류에서 개가 될지 고양이가 될지 )

  7. 다형성의 단점

    - 부모의 형태로 들어가면 자식의 고유 특성이 사라진다
    - 고유 특성을 사용하고 싶으면 다시 자식으로 변해야한다.(casting)

    - 부모클래스 Mammal

    - 자식클래스 Dog
    - 상속관곈데 같은 메서드가 있으면 오버라이드 한 것이다.
    - 부모클래스의 birth를 오버라이드해서 실행문을 바꿨다.

    - 자식클래스 Cat
    - 상속관곈데 같은 메서드가 있으면 오버라이드 한 것이다.
    - 부모클래스의 birth를 오버라이드해서 실행문을 바꿨다.

    - 상속관계의 다형성을 이용해 Dog(자식)이 Mammal(부모) 형태로 들어감
    - 그래서 이 경우에는 부모로 들어 왔기 때문에 개의 고유 특성을 사용할 수 없다.
    - 개의 고유 특성을 사용하고 싶다면 casting을 해줘야한다(mammal -> 개 로 다시 변화시켜줘야함)
    - 13 : casting하는 과정
    - 14 : casting을 했다면 개의 고유특성 사용 가능
    - 출력 값 :


    - 위에서 7줄을 통해 Dog를 Mammal로 넣어주었다
    - 근데 개의 고유특성을 사용하려면 casting을 해줬는데 고양이는 casting을 할 수 없다
    ○ Dog만 포유류에만 넣어 줬을 뿐 Cat은 아무런 선언을 안해줬기 때문이다( 개 - > 포유류 -> 고양이 가 안되기 때문)
    ○ 그래서 위를 실행하면 오류 난다.

    - mal이 Cat으로 부터 온건지 Dog으로부터 온건지 모를 때 확인하는 방법이다.
    - instanceof : 참조변수가 참조하고 있는 객체의 실제 타입을 알아보기 위해 사용
    ○ 참조변수 instanceof 타입(클래스명) 으로 쓰인다
    ○ true 나 false를 반환
    - if(mal instanceof Cat) : mal의 타입이 Cat이었어?
    - 아니기 때문에 else가 실행 된다.

profile
개발이좋아요

0개의 댓글