JAVA

[JAVA] 클래스의 상속 3 : 상속의 목적 (자바 독학하기18)

자라는레몬 2021. 7. 12. 22:34
반응형

상속은 연관된 일련의 클래스들에 대해 공통적인 규약을 정의할 수 있다고 하였다.

상속으로 인해 동일한 공통점이 있는 정보들에 대해 공통 규약을 만들어 상속 시킨 후 정보 관리에서 이점을 느낄 수 있다.

 

클래스를 정의할 때 어떤 클래스도 상속하지 않으면 java.lang 패키지에 묶여 있는 Object 클래스를 상속하게 된다. 

임의의 클래스

class A{}

를 정의하면 이는

class A extends Object{}

와 동일하다.

물론 임의의 클래스 A 가 다른 클래스를 상속 하더라도 이 super class 는 물론 Object 클래스를 상속하기 때문에 직,간접적으로 Object 클래스를 상속하는 구조이다.

이렇게 되어 있는 이유는 자바의 모든 인스턴스에 공통된 기준 및 규약을 적용하기 위해서다.

system.out.println 을 모든 클래스에서 사용할 수 있는 이유이다.

 

- 클래스를 정의할때 해당 클래스를 다른 클래스가 상속하는 것을 원하지 않는다면, final 선언을 하면 된다.

public final class DoNotInheritance{}

이와 같이 선언하면 해당 클래스는 다른 클래스가 상속할 수 없다.

- 또한 메소드에 final 선언을 하게 되면 오버라이딩을 할 수 없게 된다.

 

자바 5 에서 어노테이션이라는 것이 소개되었는데 그 중 @Override 라는 것이있다.

- @Override 는 해당 메소드가 상위 클래스의 메소드를 오버라이딩 할 목적으로 정의하였다는 것을 컴파일러에게 알려주는 것이다.

public int add (int a, int b)

라는 메소드가 존재하고 이를 오버라이딩 하기위해

public double add (double a, double b)

라는 메소드를 하위 클래스에서 정의하였다고 한다면 이는 매개변수 형과 반환 형이 다르기 때문에 오버라이딩이 성립되지 않는다.

그러나 해당 코드는 에러를 나타내지 않고 동작하기 때문에 혼란을 만들 수 있다.

그래서 해당 메소드 전 줄에 @Override 을 입력하면 컴파일러가 오버라이딩이 제대로 되었는지 체크하고 그렇지 않으면 에러를 전달해 주게 된다.

 

public class Overriding extends Parent{
   @Override
   public double add(double a, double b) {
   return a + b;
   }
}

과 같이 사용할 수 있다.

반응형