본문 바로가기
language/JAVA

[JAVA] 상속 / 오버라이딩 / super, super()

by susu2 2021. 7. 29.

자바의 꽃이라고 불리우는 상속에 대해 알아보자!

 

1. 상속이란? 

기존에 있는 클래스를 재사용하여 새로운 클래스를 작성하는 것이다.

  • 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 수정이 쉽다.
  • 코드의 중복을 제거하고, 코드의 재사용성이 높아진다.

== 프로그램의 유지보수가 쉬워진다!!

 

상속은 extends 키워드로 사용할 수 있다.

class ParentClass {}
class ChildClass extends ParentClass {}

ParentClass를 부모클래스(=super클래스), ChildClass를 자식클래스라고 한다.

 

이 관계를 상속 관계도와 다이어그램으로 나타나면 아래 그림과 같다.

상속_상속관계도

 

상속_다이어그램

 

 

ParentClass에 a라는 멤버변수를 추가하면 자식 클래스인 ChildClass에도 a라는 멤버변수가 상속된다.

단, 자식 클래스인 ChildClass에 b라는 멤버변수를 추가해도 부모 클래스인 ParentClass에는 아무런 변화가 없다.

 


🌟  모든 클래스의 부모, Object 클래스 

Object 클래스는 모든 클래스의 최상위에 존재하는 부모 클래스이다.

따라서 모든 클래스는 Object 클래스에 정의된 멤버들을 사용할 수 있다.

toString()이나 equals()같은 메서드들을 사용할 때 따로 정의하지 않고 사용할 수 있었던 이유는 이 메서드들이 Object 클래스에서 정의되었기 때문이다.

 

 

2. 단일 상속 

JAVA는 다른 언어와는 달리 단일 상속(Single inheritance)만 허락한다.

다중상속의 경우 클래스 간 관계가 복잡해지는 단점이 있다. 따라서 단일상속은 클래스 간 관계를 명확히 하기 위함이다.

하지만, 인터페이스를 사용하여 다중상속의 효과를 낼 수도 있다.

class ChildClass extends ParentClass implements testInterface {}

 

 

3. 오버라이딩(Overriding) 이란? 

부모 클래스로부터 상속받은 메서드의 내용을 재정의하는 것이다.

📌 메서드의 내용만을 재정의하는 것이기 때문에 메서드 선언부는 부모의 것과 동일해야 한다!!

 

메서드를 오버라이딩 하기 위한 조건은 아래와 같다.

  • 메서드의 이름이 동일해야 함
  • 메서드의 매개변수가 동일해야 함
  • 메서드의 return 타입이 동일해야 함 (단, jdk 1.5부터 공변 반환타입이 추가되어 return 타입을 자식 클래스의 타입으로 변경할 수 있도록 허용됨.)
  • 메서드의 선언부에서 접근 제어자는 변경이 가능함. (단, 부모 클래스의 메서드보다 좁은 범위로는 변경이 불가능)
  • 메서드의 선언부에서 Exception도 변경 가능 (단, 부모 클래스의 메서드보다 많은 수의 예외는 선언 불가능)

 

 

4. super와 super() 

 super 

  • 자식 클래스에서 부모 클래스로부터 상속받은 멤버를 참조할 때 사용하는 키워드
  • 메서드를 오버라이딩 할 때, 완전히 다른 내용으로 재정의하기보다는 부모의 메서드에 내용을 덧붙이는 경우가 많기 때문에 super키워드를 사용하여 부모 메서드를 호출한 뒤 메서드의 내용을 추가한다.

 

 super() 

  • 부모 클래스의 생성자를 호출하는데 사용하는 생성자
  • Object 클래스를 제외한 모든 클래스 생성자에 this()나 super()를 호출하지 않았다면 컴파일러가 자동으로 super();를 생성자의 첫 줄에 추가한다.

 

'language > JAVA' 카테고리의 다른 글

[JAVA] StringBuilder를 사용하는 이유  (0) 2022.03.09
[JAVA] 다형성 / instanceof  (0) 2021.08.04
[JAVA] Scanner 대신 Buffer를 사용해보자!  (0) 2021.07.30
[JAVA] 변수의 종류  (0) 2021.07.28
[JAVA] JAVA란 무엇인가?  (0) 2021.07.28

댓글