자바의 꽃이라고 불리우는 상속에 대해 알아보자!
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 |
댓글