Java_note05

채승현·2025년 3월 26일

상속 및 다형성

클래스의 상속(inheritance)

  1. 상속
    부모 클래스의 멤버를 자식 클래스 내부에 포함시키는 것(생성자는 상속되지 않는다.)
  • private 접근제한자를 가진 멤버는 상속되지 않는다.
  • final이 붙은 클래스는 상속되지 않는다.
    • final 클래스를 사용하는 목적: 비공개 정보에 접근하거나 시스템을 파괴하는 것을 방지하기 위해서..
  • JVM은 자식 클래스 생성 시 부모 클래스의 객체를 생성하고 자식 클래스에서 추가한 필드, 메소드를 객체에 추가한다.
  • 상속의 장점: 코드 중복성을 제거하고 클래스의 다형적 표현이 가능해진다.

※주의: 자바는 다중상속이 불가능

  1. 다형성(polymorphism)
  • 1개의 객체를 여러 모양으로 표현할 수 있는 특성
  • 자식 타입으로도 객체를 담을 수 있고, 부모/조상 타입으로도 자식의 객체를 담을 수 있다.
public class Parent { ~ }
public class Child extends Parent { ~ }

Parent parent = new Child( ); //(O)
Child child = new Parent( ); //(Error)

객체의 타입 변환

  1. 업 캐스팅(up casting)
  • 범위가 좁은 쪽에서 넓은 쪽으로 캐스팅하는 것
  • 객체는 항상 업캐스팅할 수 있으므로 명시적으로 적지 않아도 컴파일러가 대신 넣어준다.
  1. 다운 캐스팅(down casting)
  • 업 캐스팅의 반대(넓은 쪽에서 좁은 쪽으로)
  • 다운 캐스팅은 개발자가 직접 넣어주어야 한다.
  1. 캐스팅 가능여부 확인: instanceof 키워드
//jdk 12버전 이전
참조변수 instanceof 타입
타입 참조변수 = new 타입( );
//true - 참조변수가 해당 타입으로 캐스팅 가능
//false - 캐스팅 불가능

//------------------------------

//jdk 12버전 이후
참조변수 instance of 타입 참조변수
  1. 메소드 오버라이딩(overriding)
    동일한 이름의 메소드를 재정의하는 것(자식에 맞게 고쳐 사용하는 것)
  • 부모 클래스의 메소드와 시그니처 및 리턴 타입이 동일해야 한다.
  • 부모 클래스의 메소드보다 접근지정자의 범위가 같거나 넓어야 한다.

※주의사항

  • 인스턴스 필드는 객체 내에 존재하므로 저장공간이 달라 오버라이딩 되지 않는다.
  • 정적(static) 필드, 정적 메소드는 클래스 내부에 존재하므로 역시 저장공간이 분리되어 있어 오버라이딩 되지 않는다.
  • 동일한 필드나 동일한 메소드가 있을 때 참조변수가 가리키는 객체의 바깥쪽부터 안쪽으로 들어가며 만나는 첫번째 멤버가 실행
  • @: 어노테이션
    컴파일러가 문법 오류를 미리 점검하거나 실행시간 도중에 특정 기능 수행하도록 정보 제공
    @Override: 컴파일러에게 뒤의 메소드를 미리 점검하게 함.

super 키워드와 super( ) 메소드

  1. super
  • 부모의 객체
  • super.부모필드명, super.부모메소드명( )
  1. super( )
  • 부모의 생성자
  • 반드시 생성자 첫줄에 위치, 생략 시 컴파일러가 자동 삽입
    • super( ): 부모의 기본 생성자 호출
    • super(매개값, ~): 부모의 매개변수 있는 생성자 호출
profile
예비 개발자..(원해요)

0개의 댓글