Java (4) (상속, 오버라이딩 오버로딩)

넙데데맨·2022년 5월 19일
0

상속

슈퍼 클래스(부모 클래스) : 특성을 물려주는 클래스
서브 클래스(자식 클래스) : 특성을 물려받는 클래스

  • 서브 클래스는 슈퍼 클래스를 물려받으면서 자신만의 특성을 붙일 수 있기 떄문에 갈수록 구체적으로 변화한다.

  • extends 키워드를 통해 상속

  • Java는 다중 상속을 지원하지 않는다

  • java.lang.Object는 모든 클래스의 조상 클래스

부모 생성자, 자식 생성자

  • 서브 클래스가 실행될 때 서브클래스와 슈퍼클래스의 생성자가 둘 다 실행된다.
  • 슈퍼클래스 - 서브클래스 순으로 호출되며 슈퍼 클래스의 생성자는 명시적으로 선언하는 게 아닐 시 기본 생성자만 호출된다.
  • 서브 클래스에 기본 생성자가 있는 데 슈퍼 클래스에는 기본 생성자가 없다면 오류가 발생하게 된다.

타입 변환

업캐스팅

서브 클래스 객체가 슈퍼 클래스 타입으로 변환되는 것

	superC s = new subC();

이때 객체 s는 superC의 멤버만 사용 가능하다.

다운 캐스팅

명시적으로 타입을 지정해 업캐스팅을 되돌리는 것

instanceof

객체의 실제 클래스 타입을 확인하기 위한 이항연산자
객체 instanceof 클래스타입으로 사용하며 결과로 boolean 타입 값을 내놓는다.

if(kim instanceof Person)

메소드 오버라이딩

슈퍼 클래스의 메소드를 동일한 이름으로 서브 클래스에서 재작성하는 것

조건

  • 슈퍼 클래스의 메소드와 완전 동일한 메소드 재정의
  • 슈퍼클래스 메소드의 접근 지정자보다 범위가 좁아질 수 없다.
  • 이름과 매개 변수 리스트가 같고 리턴 타입을 다르게 지정할 수 없다.

그 외

  • 오버라이딩된 메소드를 우선 호출한다.
  • 업캐스팅된 슈퍼클래스 레퍼런스에서 오버라이딩된 메소드를 실행할 시 오버라이딩된 메소드만 호출하게 된다.
	//Line 클래스는 superC 클래스를 상속받는 서브 클래스
	superC s = new superC();
    s.draw() // superC 클래스의 draw 실행
	Line a = new Line();
    a.draw();  // Line 클래스의 draw 실행
  	superC l = new Line();
    l.draw(); // Line 클래스의 draw() 실행

super

super.멤버이름 : 슈퍼 클래스의 레퍼런스에 접근할 수 있다.

그 외

this : 현재 객체의 주소
this() : 동일 클래스 내 다른 생성자 호출
super : 현재 객체 내 슈퍼클래스 영역 주소
super() : 서브 클래스 생성자에서 슈퍼 클래스의 생성자 선택 호출

메소드 오버로딩

같은 클래스나 상속 관계에서 동일 이름 메소드 중복 작성

profile
차근차근

0개의 댓글