자바 기초

상속성과 다형성

YJH3968 2021. 4. 16. 15:19
728x90
  • 자바는 단일 상속만 허용한다. 인터페이스의 경우에만 다중 상속을 허용한다.
  • super 예약어는 상위 클래스의 this다.
  • 생성자 method에서는 super()와 this() 중 하나만 사용 가능하고, 만약 어느 것도 없으면 JVM이 자동으로 매개 변수가 없는 super() method가 있다고 인식한다.
  • 접근 권한의 크기와 내용
    • private < package < protected < public
    • private은 자신의 클래스에서만 사용할 수 있다.
    • package는 동일한 package + 동일한 파일에서도 사용할 수 있다.
    • protected는 상속 관계에서도 사용할 수 있다.
  • 오버라이딩과 오버로딩
    • 오버라이딩(overriding)은 상속 관계에서 상위 클래스와 하위 클래스에 있는 이름과 매개 변수가 모두 동일한 method를 가리킨다.
    • 오버로딩(overloading)은 이름은 동일하나 매개 변수의 개수나 종류가 다른 method를 가리킨다.
  • 오버라이딩에는 두 가지 규칙이 있다.
    1. 하위 클래스의 method의 접근 제한자의 범위가 상위 클래스의 method보다 같거나 더 커야 한다.
      • ex) 상위 클래스의 method의 접근 제한자가 package이면 하위 클래스의 method의 접근 제한자는 package, protected, public이 가능하다.
    2. 하위 클래스의 method에 throws 구문이 있으면 상위 클래스의 method에도 반드시 해당 예외 클래스에 준하는 throws 구문이 있어야 한다.
  • final 예약어를 클래스 앞에 붙이면 상속을 막고, method 앞에 붙이면 오버라이딩을 막는다.
  • 다형성은 여러 개의 개별적인 클래스를 상위 클래스 하나로 통합 관리하는 것을 말한다.
class A {}
class B extends A {}

A b = new B();
  • 다형성의 중요한 특징으로는 다형성으로 선언된 객체를 통해서는 상위 클래스의 필드만 접근할 수 있지만, method를 호출하는 경우 하위 클래스에 오버라이딩된 method가 있으면 그 method를 호출한다는 점이다.
  • 다형성을 이용해 상위 클래스로 정의한 객체를 다시 하위 클래스 변수에 저장할 경우 명시적으로 캐스팅(Casting)을 해야 한다. 
class A {}
class B extends A {}

A ap = new B();
B bp = ap; // 오류 발생
B bp = (B)ap; // 정상적으로 실행
  • 하지만 이는 ap가 실제로는 상위 클래스의 객체인 경우 문제가 발생하므로 ap가 실제로 B 클래스의 객체임을 확인하고 캐스팅을 해야 한다. 이를 위해 사용하는 예약어가 바로 instanceof이다.
if (ap instanceof B) {
    bp = (B)ap;
}

 

출처 : 헬로 자바 프로그래밍(2016)

728x90

'자바 기초' 카테고리의 다른 글

제네릭  (0) 2021.04.18
자바 멀티 스레드  (0) 2021.04.17
예외 처리와 어설션  (0) 2021.04.16
추상 클래스와 인터페이스  (0) 2021.04.16
중첩 클래스  (0) 2021.04.16