참치코더의 꿈 메모장

2021/08/14 Java - 상속 본문

JAVA

2021/08/14 Java - 상속

참치깡 2021. 8. 15. 00:14
728x90

클래스 상속 

 

자식 클래스를 선언할 때 어떤 부모 클래스를 상속받을 것인지 결정하고, 선택된 부모 클래스는 extends 뒤에 기술한다.

 

class 자식클래스 extends 부모클래스{

 

}

 

상속의 특징 

 

1. 여러개의 부모 클래스를 상속 받을 수 없다.  따라서 extends 뒤에는 단 하나의 부모 클래스만 와야 한다.

2. 부모 클래스에서 private 접근 제한을 갖는 필드와 메소드는 상속 대상에서 제외된다. 

   또한 서로 다른 패키지에 존재한다면 default 접근 제한을 갖는 필드와 메서드도 상속 대상에서 제외된다.

 

부모 생성자 호출 

 

항상 부모 객체가 먼저 생성되고 그다음에 자식 객체가 생성된다.

 

*모든 객체는 클래스의 생성자를 호출해야만 생성되며, 부모 생성자는 자식 생성자의 맨 첫 줄에서 호출된다.

 

자식클래스( 매개변수 선언, ..... ) {

   super(매개값, .....);

}

 

super(매개값, ...)은 매개값의 타입과 일치하는 부모 생성자를 호출한다. 

만약 매개값의 타입과 일치하는 부모 생성자가 없을 경우 컴파일 에러가 발생한다.

 

부모 클래스에 기본 생성자가 없고 매개 변수가 있는 생성자만 있다면 자식 생성자에는 반드시

부모 생성자 호출을 위해 super(매개값, ...)를 명시적으로 호출해야 한다.

super(매개값, ...)은 반드시 자식 생성자 첫 줄에 위치해야 하며, 그렇지 않으면 컴파일 에러가 발생한다.

 

메소드 재정의 

 

부모 클래스에 있는 메서드를 자식 클래스에서 좀더 효과적으로 사용하기 위해 메서드를 

수정해야 하는 경우가 생긴다. 

 

자바는 이러한 경우를 위해 메소드 재정의(오버라이딩) 기능을 제공한다.

 

메소드 재정의(오버라이딩) 방법 

 

1. 부모의 메소드와 동일한 시그니쳐(리턴 타입, 메소드 이름, 매개 변수 목록)를 가져야 한다.

2. 접근 제한을 더 강하게 재정의할 수 없다.

3. 새로운 예외(Exception)을 throws할 수 없다. 

 

* 메소드가 재정의되었다면 부모 객체의 메소드는 숨겨지기 때문에, 자식 객체에서 메소드를 호출하면, 

  재정의된 자식 메소드가 호출된다.

 

* 메소드를 재정의 하면 @Override 라는 어노테이션을 선언 하거나 또는 자동으로 이클립스에서 선언해주는데

  메소드가 정확히 재정의 된 것인지 컴파일러가 확인해 주기 때문에 개발자의 실수를 줄여준다.

 

부모 메소드 호출

 

자식 클래스의 메소드를 재정의 하게 되면, 부모 클래스의 메소드는 숨겨지고 재정의된 자식 메소드만 사용된다.

그러나 부모 클래스의 메소드를 다시 호출해서 사용하고 싶다면 super 키워드를 붙여서 호출할 수 있다.

 

super.부모메서드( );

 

* 자주 사용되는 고정값들은 상수를 사용함으로써 가독성을 높여준다.

 

final 클래스와 final 메소드

 

final 키워드는 클래스, 필드, 메소드를 선언할 때 사용할 수 있는데, 해당 선언이 최종 상태이고 

결코 수정될 수 없음을 뜻한다. 

 

상속할 수 없는 final 클래스

 

클래스를 선언할 때 final 키워드를 class 앞에 붙이면 이 클래스는 최종적인 클래스이므로

상속할 수 없는 클래스가 된다.

 

즉 final 클래스는 부모 클래스가 될 수 없어 자식 클래스를 만들 수 없다는 것이다.

 

public final class String{ ... } 

 

재정의할 수 없는 final 메소드 

 

메소드를 선언할 때 final 키워드를 붙이면 이 메소드는 최종적인 메소드이므로 재정의할 수 없는 메소드가 된다.

 

public final 리턴타입 메소드( [매개변수, ...] ) { .... }

 

 

 

 

 

 

 

728x90
Comments