- [Java] 38. 상속 관계와 메서드 오버라이딩2024년 04월 23일
- Song hyun
- 작성자
- 2024.04.23.:35
728x90반응형[Java] 38. 상속 관계와 메서드 오버라이딩
1. 상속
(1) 상속(Inheritance): 기존에 존재하는 클래스로부터 필드(멤버변수)와 메서드를 이어받고,필요한 기능을 추가할 수 있는 기법을 말한다.
-상속은 객체 지향 패러다임에서 중요한 개념 중 하나이다.
-상속은 기존의 클래스를 확장하여 새로운 클래스를 정의하는 매커니즘을 뜻한다.
-상속을 통해 기존 클래스의 특성과 메서드를 재사용하고, 확장하여, 새로운 클래스를 만들 수 있다.-상속을 통해 검증된 소프트웨어를 재사용할 수 있어, 신뢰성있는 소프트웨어를 손쉽게 개발, 유지할 수 있다는 장점이 있다. 또한 코드의 중복 역시 줄일 수 있다.
*객체 지향 패러다임의 많은 장점이 상속에서 비롯된다.
(2) 부모 클래스/슈퍼 클래스(Parent class/Super class): 기존에 정의된 클래스이다. 상속의 대상이 된다.
자신의 클래스의 속성과 메서드를, 자식 클래스에게 상속한다.
(3) 자식 클래스/서브 클래스(Child class/Sub class): 부모 클래스를 확장해, 새롭게 정의하는 클래스이다.
부모 클래스의 모든 속성과 메서드를 상속받는다.
*객체 지향 패러다임(OOP): 객체와 객체가 상호작용을 하도록 코드를 작성하는 것.
(ex: [학생]이 [버스]를 탄다 = 학생과 버스가 상호작용을 한다.)*상속 관계(부모 클래스-자식 클래스)를 형성해두면...
자식 클래스에서 객체를 선언하더라도, 부모 클래스에 먼저 생성되고-> 이후에 자식 클래스에 생성된다.
** 부모 클래스가 먼저 존재해야, 자식 클래스가 존재할 수 있다.
2. 상속의 사용
(1) 상속의 형식: class 자식/서브 클래스 extends 부모클래스
-extends: 확장/파생한다는 의미를 지닌 단어이다.
(2) 왜 상속을 사용할까?
(2-1) 상속은 간단하지만 아주 강력하다.
작성해야하는 코드와 유사한 코드가 존재한다면, 상속을 통해 간단하게 작성할 수 있다.
(2-2) 상속을 사용하면 중복되는 코드를 줄일 수 있다.
(3) Java 상속의 특징
(3-1) 다중 상속을 제공하지 않는다. (다중 상속= 여러 클래스들로부터 상속받는 것.)
(3-2) 상속의 횟수에 제한이 없다.
(3-3) 상속계층 최상위에는 java.lang.Object가 있다.
(4) 상속과 접근 지정자
: 상속과 Protected 접근 지정자가 함께 쓰이기도 한다.
protected는 동일한 클래스/패키지/자식클래스 까지 접근이 가능한 지정자이다.
(5) 상속과 생성자: 자식 클래스의 객체가 생성될 때, 부모 클래스의 생성자도 호출될까?
: 자식 클래스 안에는 부모 클래스에서 상속받은 부분이 포함되어 있다.
따라서 자식 클래스 안의 부모 클래스의 일부를 초기화하기 위해, 부모클래스의 생성자 역시 호출된다.
3. 메서드 오버라이딩
(1) 메서드 오버라이딩(Overriding): 자식클래스가 부모 클래스의 메서드를 본인의 필요에 맞춰. 재정의하는 것이다.
즉, 이는 자식 클래스에서, 부모 클래스에서 물려받은 메서드를 새롭게 구현하는 것을 일컫는다.
***이렇게 하면, 자식 클래스는 부모 클래스의 메서드를 덮어쓰게 된다.
이후 메서드를 호출 시, 부모 클래스가 아닌 자식 클래스 내부의 오버라이드 된 메서드가 호출된다.
(2) 어노테이션: 주석+힌트
(3) 키워드 super.: 부모/슈퍼 클래스를 호출하는 키워드이다. (참조 변수 this와도 유사하다.)
부모 클래스의 메서드를 오버라이딩한 경우, super를 사용할 경우 부모 클래스의 메서드를 호출할 수 있다.
**(4) 오버로딩 vs 오버라이딩: 헷갈리지 말자!
오버로딩(Overloading): 같은 메서드명을 가진 여러개의 메서드를 작성하는 것.
오버라이딩(Overriding): 부모 클래스의 메서드를 자식 메서드가 재정의하는 것이다.
728x90반응형'Java > 기본 개념 및 클래스' 카테고리의 다른 글
[Java] 40. 메서드 오버로딩, 상속 응용: 유닛에 마린, 질럿, 저글링 상속시키기 (0) 2024.04.23 [Java] 39. 포함 관계 (0) 2024.04.23 [Java] 37. 메서드 오버로딩 (0) 2024.04.23 [Java] 36. 배열 활용: 랜덤 숫자 생성기 (0) 2024.04.22 [Java] 35. 배열 활용: 전화번호부 만들기 (0) 2024.04.22 다음글이전글이전 글이 없습니다.댓글