오버라이딩과 다형성

song yuheon·2023년 8월 20일
0

오버라이딩

부모 클래스로부터 상속받은 메서드의 내용을 재정의 하는 것

  • 오버라이딩을 위한 조건
    1. 선언부가 부모 클래스의 메서드와 일치
    2. 접근 제어자를 부모 클래스의 메서드 보다 좁은 범위로 변경 불가
    3. 예외는 부모 클래스의 메서드 보다 많이 선언할 수 없음
  • super
    super는 부모 클래스의 멤버를 참조할 수 있는 키워드
    부모 클래스의 멤버에 접근하기 위해 사용
    자식 클래스 내부에서 선언한 멤버와 부모 클래스에서 상속받은 멤버와 이름이 같을 경우 이를 구분하기 위해 사용
public void setCarInfo(String model, String color, double price) {
    super.model = model; // model은 부모 필드에 set
    super.color = color; // color는 부모 필드에 set
    this.price = price; // price는 자식 필드에 set
}
  • super()
    부모 클래스의 생성자를 호출하기 위해 사용
    자식 클래스 생성시 자식 클래스의 생성자에서 부모 클래스의 생성자 호출 => ( 부모 클래스 초기화 -> 자식 클래스 초기화 )
    부모 클래스의 생성자는 가장 첫 줄에서 호출해야한다.

다형성

  • 다형성이란?
    여러가지의 형태 가질 수 있는 성질
  • 참조변수의 타입 변환
    • 자동 타입 변환
      ( 부모타입 변수 = 자식타입객체 )는 자동으로 부모타입으로 변환발생
      자식 객체는 부모 객체의 멤버를 상속받기 때문에 부모와 동일하게 취급
    • 강제 타입 변환
      자식타입 변수 = (자식타입) 부모타입객체
      부모타입객체는 자식타입 변수로 자동으로 타입변환되지 않음
      타입변환 연산자를 사용하여 강제로 자식타입으로 변환가능
      자식 타입 객체가 부모 타입으로 자동 타입변환된 후 다시 자식타입으로 변환될 때만 가능
      자동 타입변환된 부모타입 변수가 아닌 부모객체를 자식타입의 변수로 강제 타입변환하려고 하면 오류가 발생
  • instance of
    다형성 기능으로 인해 해당 클래스 객체의 원래 클래스명을 체크하는것이 필요
    [객체 A ] instance of [객체 B]
    => 이를 체크해주는 명령어 = instance of
    ex) System.out.println(p instanceof Parent);
profile
backend_Devloper

0개의 댓글