[JAVA]오버라이딩(Overriding)

2020. 5. 10. 17:39JAVA

Overriding?

상위 클래스에서 하위 클래스를 상속할 경우, 둘의 메소드 명이 동일할 때 하위 클래스에서 메소드를 재정의 하는 것을 말한다.

 

Overriding의 조건

  1. 메소드 명이 동일해야 하고 매개변수 또한 동일해야 한다. 
  2. 상속 관계 일 때만 성립이 된다.
  3. 하위 클래스의 접근 제어자가 상위 클래스의 접근 제어자 보다 더 크거나 같아야 한다.

ex) 상위 클래스 : package(default) -> 하위 클래스(public, package(default), protected)

 

오버 라이딩(Overriding), 오버 로딩(Overloading)의 차이점

  1. 오버 로딩의경우 메소드 명 동일하고 매개변수 는 달라 하지만 오버라이딩 메소드 명, 매개변수 또한 동일해야 한다.
  2. 오버 라이딩의경우 상속 관계에서만 성립 된다.

 

Overriding 예시

 

1. 부모 클래스(상위 클래스) Shape에서 shapes라는 메소드 생성 

 

2. Shape 클래스를 상속받는 자식 클래스(하위 클래스)

Triangle 클래스에 shapes 메소드를 오버 라이딩한다.

(메소드 명 동일, 매개변수 동일)

추가적으로 넓이를 구할 수 있는 area 메소드를 생성.

 

3. Triangle 클래스를 상속받는 하위 클래스 인

Squale 클래스에 shapes, area 메소드를 오버 라이딩

즉 재정의 한다. 

(메소드 명 도 동일하고 부모 클래스에서 생성할 때

매개변수를 설정 안 했기에 매개변수 또한 없음.)

 

결괏값을 예상해보자. 

main 메소드 :

 

<Triangle>

shapes 메소드 값 : 

도형의 모양은 삼각형입니다. 

<Squale>

shapes 메소드 값 : 

도형의 모양은 사각형입니다.

area 메소드 값 : 

row * column 이므로 (5*4) 20 이 출력될 것이다.

 

 

출력 값 

 

Shape 클래스를 생성한 객체 shapes 

Triangle 클래스 를 생성한 객체 triangles

Squale 클래스 를 생성한 객체 squales 

 

동일 함수를 호출했음에도 하위 클래스에서 호출한 메소드의 값이 다르다는 걸 알 수 있다.

오버 라이딩(재정의) 알 수 있다.

 


++

오버 라이딩 한 메소드 위의 @Override(Annotation)

를 추가하는 것이 관례이며, 가독성 면에서도 좋다.

'JAVA' 카테고리의 다른 글

[JAVA] 추상 클래스(Abstract Class)  (0) 2020.05.18
[JAVA] 오버로딩(OverLoading )  (3) 2020.05.07
[JAVA] Map(HashMap)  (1) 2020.04.22
[JAVA] List - ArrayList  (2) 2020.04.12
[JAVA] 배열(Array)의 응용  (0) 2020.04.07