상속 Java (예제 포함)

⚡ 스마트 요약

상속 Java `extends`는 한 클래스가 다른 클래스의 필드와 메서드를 `extends` 키워드를 통해 상속받는 메커니즘입니다. 이는 코드 재사용성을 높이고 슈퍼클래스와 서브클래스 간의 동일/대(Is-A) 관계를 나타내는 데 유용합니다.

  • 🧬 상속의 정의: 한 클래스가 extends를 사용하여 다른 클래스의 필드와 메서드를 상속받습니다.
  • 👨‍👩‍👧 관계인가? 부모(슈퍼) 클래스와 자식(서브) 클래스의 계층 구조를 모델링합니다.
  • 🗂️ 다섯 가지 유형: 단일 상속, 다중 상속, 다단계 상속, 계층적 상속 및 혼합 상속.
  • 🚫 Java 한정: Java 클래스를 통한 다중 상속 또는 혼합 상속을 지원하지 않습니다.
  • 🔑 슈퍼 키워드: 하위 클래스에서 상위 클래스의 변수, 메서드 및 생성자에 접근합니다.
  • 이점 : 기존 클래스를 수정하지 않고 검증된 코드를 재사용하고 새로운 클래스를 통해 기능을 추가합니다.

상속 Java

상속이란 무엇입니까?

계승 한 클래스가 다른 클래스의 속성을 획득하는 메커니즘입니다. 예를 들어, 아이는 부모의 특성을 물려받습니다. 상속을 통해 기존 클래스의 필드와 메서드를 재사용할 수 있습니다. 따라서 상속은 재사용성을 용이하게 하며 OOP의 중요한 개념입니다.

상속이란 무엇입니까? Java?

Java 계승 한 클래스가 다른 클래스의 속성을 획득하는 메커니즘입니다. ~ 안에 Java, 두 클래스 사이에 "Is-A" 관계가 존재할 때 상속을 사용합니다. 부모 클래스를 슈퍼클래스, 상속받은 클래스를 서브클래스라고 합니다. 키워드 extends 하위 클래스가 슈퍼 클래스의 기능을 상속하는 데 사용됩니다. 상속은 코드의 재사용성으로 이어지기 때문에 중요합니다.

Java 상속 구문:

class subClass extends superClass
{
   //methods and fields
}

상속의 종류 Java

다음은 다양한 유형의 상속입니다. Java:

  1. 단일 상속
  2. 다중 상속
  3. 다단계 상속
  4. 계층 적 상속
  5. 하이브리드 상속

1. 단일 상속:

단일 상속에서는 하나의 클래스가 다른 클래스를 확장합니다(하나의 클래스만).

단일 상속 Java
단일 상속

위 다이어그램에서 클래스 B는 클래스 A만 확장합니다. 클래스 A는 슈퍼 클래스이고 클래스 B는 하위 클래스입니다.

2. 다중 상속:

다중 상속은 상속 중 하나입니다. Java 하나의 클래스가 둘 이상의 클래스를 확장하는 유형. Java 다중 상속을 지원하지 않습니다.

다중 상속 Java

Java 다중 상속

위의 다이어그램에 따라 클래스 C는 클래스 A와 클래스 B를 모두 확장합니다.

3. 다단계 상속:

다중 수준 상속에서는 하나의 클래스가 파생 클래스에서 상속될 수 있습니다. 따라서 파생 클래스는 새 클래스의 기본 클래스가 됩니다.

다단계 상속 Java

다단계 상속

다이어그램에 표시된 대로 클래스 C는 B의 하위 클래스이고 B는 클래스 A의 하위 클래스입니다.

4. 계층적 상속:

계층적 상속에서는 하나의 클래스가 여러 하위 클래스에 상속됩니다.


계층적 상속 Java

계층 적 상속

위의 예에 따라 클래스 B, C, D는 동일한 클래스 A를 상속합니다.

5. 하이브리드 상속:

하이브리드 상속은 상속 유형 중 하나입니다. Java 이는 단일 상속과 다중 상속의 조합입니다.


하이브리드 상속

하이브리드 상속

위의 예에 따라 클래스 A의 모든 공개 및 보호 멤버는 먼저 클래스 B를 통해, 두 번째로 클래스 C를 통해 클래스 D로 상속됩니다.

참고 : Java 하이브리드/다중 상속을 지원하지 않습니다.

상속 Java 예시

다음은 상속의 예입니다. Java:


예 Java 계승

Java 상속 예

class Doctor {
 void Doctor_Details() {
  System.out.println("Doctor Details...");
 }
}

class Surgeon extends Doctor {
 void Surgeon_Details() {
  System.out.println("Surgen Detail...");
 }
}

public class Hospital {
 public static void main(String args[]) {
  Surgeon s = new Surgeon();
  s.Doctor_Details();
  s.Surgeon_Details();
 }
}

슈퍼 키워드

super 키워드는 "this" 키워드와 유사합니다. 키워드 super는 부모 클래스의 모든 데이터 멤버나 메서드에 액세스하는 데 사용할 수 있습니다. Super 키워드는 다음에서 사용할 수 있습니다. 변수, 메서드 및 생성자 수준.

구문 :

super.<method-name>();

또한 확인:- 이 키워드는 Java: 예시와 함께 사용 방법 및 정의

예제를 통해 OOP의 상속 배우기

동일한 뱅킹 애플리케이션을 고려해보세요. 이전 예.

우리는 두 가지 다른 계좌 유형을 개설해야 합니다. 하나는 저장용이고 다른 하나는 확인용(현재라고도 함)입니다.

OOP의 상속

코딩에 접근하는 방법을 비교하고 연구해 봅시다. 구조화되고 객체지향적인 프로그래밍 관점.

구조적 접근: 구조적 프로그래밍에서는 두 개의 함수를 생성합니다.

  1. 철회할 하나
  2. 그리고 다른 하나는 입금 작업을 위한 것입니다.

이러한 기능의 작동은 계정 전체에서 동일하게 유지됩니다.

OOP의 상속

OOP의 접근 방식: 를 사용하는 동안 OOP 프로그래밍 접근 방식. 우리는 두 개의 클래스를 만들 것입니다.

  • 각각 입금 및 출금 기능이 구현되어 있습니다.
  • 이로 인해 추가 작업이 중복됩니다.

OOP의 상속

소프트웨어 변경 요청

이제 소프트웨어 업계에서 흔히 볼 수 있는 요구 사항 사양이 변경되었습니다. 초과인월 기능을 갖춘 권한 있는 은행 계좌 기능을 추가해야 합니다. 기본적으로 당좌인월은 귀하의 계좌 잔고보다 더 많은 금액을 인출할 수 있는 기능입니다.

소프트웨어 변경 요청

구조적 접근: 기능적 접근 방식을 사용하여 이미 테스트되고 기준이 설정된 철회 기능을 수정해야 합니다. 그리고 아래와 같은 메소드를 추가하면 새로운 요구 사항을 처리할 수 있습니다.

소프트웨어 변경 요청

OOP의 접근 방식: OOP의 접근 방식을 사용하면 철회 기능을 고유하게 구현한 새 클래스를 작성하기만 하면 됩니다. 우리는 테스트된 코드 조각을 건드린 적이 없습니다.

소프트웨어 변경 요청

다른 변경 요청

요구 사항이 더 변경되면 어떻게 되나요? 고유한 입금 요구 사항이 있는 신용 카드 계좌를 추가하고 싶습니다..

소프트웨어 요구사항의 다중 변경 요청

구조적 접근: 구조적 접근 방식을 사용하면 테스트된 입금 코드 부분을 다시 변경해야 합니다.

소프트웨어의 다중 변경 요청에 대한 구조적 접근 방식

OOP의 접근 방식: 하지만 객체지향적 접근 방식을 사용하면 입금 메서드에 대한 고유한 구현을 가진 새로운 클래스를 생성하기만 하면 됩니다(아래 이미지에서 빨간색으로 강조 표시됨). 따라서 구조적 프로그래밍이 처음에는 더 쉬운 접근 방식처럼 보일지라도 장기적으로는 객체지향적 프로그래밍이 더 유리합니다.

다중 변경 요청에 대한 OOP의 접근 방식

OOP 상속의 장점

그러나 모든 클래스에 걸쳐 반복되는 코드 조각이 있다고 주장할 수도 있습니다.

이를 극복하기 위해 부모 클래스인 "account"를 만들고 입금 및 인출과 같은 기능을 구현합니다. 그리고 자식 클래스가 "account" 클래스를 상속하도록 합니다. 그러면 자식 클래스는 account 클래스에서 인출 및 입금 기능에 액세스할 수 있습니다. 이 기능은 개별적으로 구현할 필요가 없습니다. 이는 자바에서의 상속. .

OOP 상속의 장점

OOP 상속의 장점

자주 묻는 질문

Java 컴파일러가 어떤 상속된 메서드를 사용해야 할지 결정할 수 없는 "다이아몬드 문제"를 방지하기 위해 클래스의 다중 상속을 피합니다. 대신, Java 클래스가 여러 인터페이스를 구현하여 유사한 유연성을 안전하게 확보할 수 있도록 합니다.

`this` 키워드는 현재 객체와 그 멤버를 가리키고, `super`는 바로 위 부모 클래스를 가리킵니다. 서브클래스에서 부모 클래스의 변수, 메서드 또는 생성자를 호출하려면 `super`를 사용합니다.

상속은 하위 클래스가 부모 클래스를 확장하는 "Is-A" 관계를 모델링합니다. 구성은 클래스가 다른 객체를 포함하는 "Has-A" 관계를 모델링합니다. 구성은 종종 더 유연하며, 결합도가 낮은 설계에 선호됩니다.

AI는 클래스의 책임을 분석하고, 공유 기본 클래스를 제안하고, 깊은 상속보다는 인터페이스를 권장하고, 중복 코드를 표시할 수 있습니다.ping 개발자들은 객체 지향 설계 원칙을 따르는 깔끔하고 재사용 가능한 계층 구조를 구축합니다.

예. AI 기반 정적 분석은 상속 깊이를 측정하고, 취약하거나 과도하게 중첩된 계층 구조를 표시하며, 유지 관리성을 개선하고 긴밀한 결합을 줄이기 위해 구성 또는 인터페이스 방향으로의 리팩토링을 제안할 수 있습니다.

이 게시물을 요약하면 다음과 같습니다.