Java, 상속은 OOP(객체 지향 프로그래밍)의 중요한 기둥입니다. 이는 한 클래스가 다른 클래스의 기능(필드 및 메소드)을 상속하도록 허용하는 Java의 메커니즘입니다. Java에서 상속이란 기존 클래스를 기반으로 새 클래스를 만드는 것을 의미합니다. 다른 클래스에서 상속되는 클래스는 해당 클래스의 메서드와 필드를 재사용할 수 있습니다. 또한 현재 클래스에 새 필드와 메서드를 추가할 수도 있습니다.
Java 상속이 필요한 이유는 무엇입니까?
- 코드 재사용성: 슈퍼클래스에 작성된 코드는 모든 서브클래스에 공통됩니다. 하위 클래스는 상위 클래스 코드를 직접 사용할 수 있습니다.
- 메소드 재정의: 메소드 재정의 상속을 통해서만 가능합니다. 이는 Java가 런타임 다형성을 달성하는 방법 중 하나입니다.
- 추출: 모든 세부 사항을 제공할 필요가 없는 추상 개념은 상속을 통해 달성됩니다. 추출 사용자에게 기능만 보여줍니다.
Java 상속에 사용되는 중요한 용어
- 수업: 클래스는 공통 특성/동작 및 공통 속성/속성을 공유하는 개체 집합입니다. 클래스는 실제 개체가 아닙니다. 이는 객체가 생성되는 템플릿, 청사진 또는 프로토타입일 뿐입니다.
- 슈퍼 클래스/부모 클래스: 기능이 상속되는 클래스를 슈퍼클래스(또는 기본 클래스 또는 부모 클래스)라고 합니다.
- 하위 클래스/하위 클래스: 다른 클래스를 상속하는 클래스를 하위 클래스(또는 파생 클래스, 확장 클래스 또는 하위 클래스)라고 합니다. 하위 클래스는 상위 클래스 필드 및 메서드 외에도 자체 필드 및 메서드를 추가할 수 있습니다.
- 재사용 성: 상속은 재사용성 개념을 지원합니다. 즉, 새 클래스를 만들고 싶고 원하는 코드 일부를 포함하는 클래스가 이미 있는 경우 기존 클래스에서 새 클래스를 파생시킬 수 있습니다. 이렇게 하면 기존 클래스의 필드와 메서드를 재사용할 수 있습니다.
Java에서 상속을 사용하는 방법은 무엇입니까?
그만큼 키워드 확장 Java에서는 상속에 사용됩니다. 확장 키워드를 사용하면 기존 클래스에서 파생되었음을 나타냅니다. 즉, 확장이란 기능이 향상되는 것을 의미합니다.
구문:
class DerivedClass extends BaseClass { //methods and fields }>Java 예제의 상속
예: 아래 상속 예에서 Bicycle 클래스는 기본 클래스이고 MountainBike 클래스는 Bicycle 클래스를 확장하는 파생 클래스이며 Test 클래스는 프로그램을 실행하는 드라이버 클래스입니다.
자바 // Java program to illustrate the // concept of inheritance // base class class Bicycle { // the Bicycle class has two fields public int gear; public int speed; // the Bicycle class has one constructor public Bicycle(int gear, int speed) { this.gear = gear; this.speed = speed; } // the Bicycle class has three methods public void applyBrake(int decrement) { speed -= decrement; } public void speedUp(int increment) { speed += increment; } // toString() method to print info of Bicycle public String toString() { return ('No of gears are ' + gear + '
' + 'speed of bicycle is ' + speed); } } // derived class class MountainBike extends Bicycle { // the MountainBike subclass adds one more field public int seatHeight; // the MountainBike subclass has one constructor public MountainBike(int gear, int speed, int startHeight) { // invoking base-class(Bicycle) constructor super(gear, speed); seatHeight = startHeight; } // the MountainBike subclass adds one more method public void setHeight(int newValue) { seatHeight = newValue; } // overriding toString() method // of Bicycle to print more info @Override public String toString() { return (super.toString() + '
seat height is ' + seatHeight); } } // driver class public class Test { public static void main(String args[]) { MountainBike mb = new MountainBike(3, 100, 25); System.out.println(mb.toString()); } }> 산출
No of gears are 3 speed of bicycle is 100 seat height is 25>
위 프로그램에서 MountainBike 클래스의 객체가 생성되면 슈퍼클래스의 모든 메서드와 필드의 복사본이 이 객체의 메모리를 획득합니다. 그렇기 때문에 하위 클래스의 객체를 사용하면 상위 클래스의 멤버에도 접근할 수 있습니다.
자바 메인 메소드
상속 중에는 상위 클래스가 아닌 하위 클래스의 객체만 생성된다는 점에 유의하세요. 자세한 내용은 다음을 참조하세요. 상속된 클래스의 Java 객체 생성 .
array.from 자바
예시 2: 아래 상속 예에서 Employee 클래스는 기본 클래스이고 Engineer 클래스는 Employee 클래스를 확장하는 파생 클래스이며 Test 클래스는 프로그램을 실행하는 드라이버 클래스입니다.
자바 // Java Program to illustrate Inheritance (concise) import java.io.*; // Base or Super Class class Employee { int salary = 60000; } // Inherited or Sub Class class Engineer extends Employee { int benefits = 10000; } // Driver Class class Gfg { public static void main(String args[]) { Engineer E1 = new Engineer(); System.out.println('Salary : ' + E1.salary + '
Benefits : ' + E1.benefits); } }> 산출
Salary : 60000 Benefits : 10000>
프로그램의 예시 이미지:

실제로는 상속과 다형성 빠른 성능과 코드 가독성을 달성하기 위해 Java에서 함께 사용됩니다.
Java 상속 유형
다음은 Java에서 지원하는 다양한 유형의 상속입니다.
- 단일 상속
- 다단계 상속
- 계층적 상속
- 다중 상속
- 하이브리드 상속
1. 단일 상속
단일 상속에서는 하위 클래스가 하나의 상위 클래스에서만 파생됩니다. 단일 부모 클래스의 속성과 동작을 상속합니다. 때로는 단순 상속이라고도 합니다. 아래 그림에서 'A'는 상위 클래스이고 'B'는 하위 클래스입니다. 클래스 'B'는 클래스 'A'의 모든 속성을 상속받습니다.
이런 개념

단일 상속
자바 // Java program to illustrate the // concept of single inheritance import java.io.*; import java.lang.*; import java.util.*; // Parent class class One { public void print_geek() { System.out.println('Geeks'); } } class Two extends One { public void print_for() { System.out.println('for'); } } // Driver class public class Main { // Main function public static void main(String[] args) { Two g = new Two(); g.print_geek(); g.print_for(); g.print_geek(); } }> 산출
Geeks for Geeks>
2. 다단계 상속
다중 수준 상속에서 파생 클래스는 기본 클래스를 상속하며 파생 클래스는 다른 클래스의 기본 클래스 역할도 합니다. 아래 이미지에서 클래스 A는 파생 클래스 B의 기본 클래스 역할을 하며, 이는 파생 클래스 C의 기본 클래스 역할을 합니다. Java에서는 클래스가 직접 액세스할 수 없습니다. 조부모님의 회원 .

다단계 상속
자바 // Importing required libraries import java.io.*; import java.lang.*; import java.util.*; // Parent class One class One { // Method to print 'Geeks' public void print_geek() { System.out.println('Geeks'); } } // Child class Two inherits from class One class Two extends One { // Method to print 'for' public void print_for() { System.out.println('for'); } } // Child class Three inherits from class Two class Three extends Two { // Method to print 'Geeks' public void print_lastgeek() { System.out.println('Geeks'); } } // Driver class public class Main { public static void main(String[] args) { // Creating an object of class Three Three g = new Three(); // Calling method from class One g.print_geek(); // Calling method from class Two g.print_for(); // Calling method from class Three g.print_lastgeek(); } }> 산출
Geeks for Geeks>
3. 계층적 상속
계층적 상속에서 하나의 클래스는 둘 이상의 하위 클래스에 대한 슈퍼클래스(기본 클래스) 역할을 합니다. 아래 이미지에서 클래스 A는 파생 클래스 B, C, D의 기본 클래스 역할을 합니다.

// Java program to illustrate the // concept of Hierarchical inheritance class A { public void print_A() { System.out.println('Class A'); } } class B extends A { public void print_B() { System.out.println('Class B'); } } class C extends A { public void print_C() { System.out.println('Class C'); } } class D extends A { public void print_D() { System.out.println('Class D'); } } // Driver Class public class Test { public static void main(String[] args) { B obj_B = new B(); obj_B.print_A(); obj_B.print_B(); C obj_C = new C(); obj_C.print_A(); obj_C.print_C(); D obj_D = new D(); obj_D.print_A(); obj_D.print_D(); } }> 산출
Class A Class B Class A Class C Class A Class D>
4. 다중 상속( 인터페이스를 통해)
~ 안에 다중 상속 , 하나의 클래스는 둘 이상의 슈퍼클래스를 가질 수 있으며 모든 상위 클래스의 기능을 상속받을 수 있습니다. Java는 ~ 아니다 지원하다 다중 상속 수업과 함께. Java에서는 다음을 통해서만 다중 상속을 얻을 수 있습니다. 인터페이스 . 아래 이미지에서 클래스 C는 인터페이스 A와 B에서 파생됩니다.

다중 상속
Java의 같음 메소드자바
// Java program to illustrate the // concept of Multiple inheritance import java.io.*; import java.lang.*; import java.util.*; interface One { public void print_geek(); } interface Two { public void print_for(); } interface Three extends One, Two { public void print_geek(); } class Child implements Three { @Override public void print_geek() { System.out.println('Geeks'); } public void print_for() { System.out.println('for'); } } // Drived class public class Main { public static void main(String[] args) { Child c = new Child(); c.print_geek(); c.print_for(); c.print_geek(); } }> 산출
Geeks for Geeks>
5. 하이브리드 상속
이는 위의 상속 유형 중 두 가지 이상이 혼합된 것입니다. Java는 클래스를 통한 다중 상속을 지원하지 않으므로 다중 상속을 포함하는 하이브리드 상속도 클래스에서는 불가능합니다. Java에서는 하이브리드 상속을 통해서만 달성할 수 있습니다. 인터페이스 하이브리드 상속을 구현하기 위해 다중 상속을 포함하려는 경우.
그러나 하이브리드 상속이 반드시 다중 상속만을 사용해야 하는 것은 아니라는 점에 유의하는 것이 중요합니다. 이는 클래스를 사용한 다중 레벨 상속 및 계층적 상속, 클래스를 사용한 계층적 및 단일 상속의 조합을 통해 달성할 수 있습니다. 따라서 다중 상속 유형에 의존하지 않고 클래스만 사용하여 하이브리드 상속을 구현하는 것이 실제로 가능합니다.

하이브리드 상속
Java IS-A 관계 유형
IS-A는 다음과 같이 말하는 방식입니다. 이 개체는 해당 개체의 유형입니다. 상속을 달성하기 위해 확장 키워드가 어떻게 사용되는지 살펴보겠습니다.
자바 디자인 패턴자바
public class SolarSystem { } public class Earth extends SolarSystem { } public class Mars extends SolarSystem { } public class Moon extends Earth { }> 이제 위의 예를 기반으로 객체 지향 용어로 다음이 적용됩니다.
- SolarSystem은 Earth 클래스의 슈퍼클래스입니다.
- SolarSystem은 Mars 클래스의 슈퍼클래스입니다.
- 지구와 화성은 SolarSystem 클래스의 하위 클래스입니다.
- Moon은 Earth 및 SolarSystem 클래스의 하위 클래스입니다.
class SolarSystem { } class Earth extends SolarSystem { } class Mars extends SolarSystem { } public class Moon extends Earth { public static void main(String args[]) { SolarSystem s = new SolarSystem(); Earth e = new Earth(); Mars m = new Mars(); System.out.println(s instanceof SolarSystem); System.out.println(e instanceof Earth); System.out.println(m instanceof SolarSystem); } }> 산출
true true true>
서브클래스에서 무엇을 할 수 있나요?
하위 클래스에서는 멤버를 그대로 상속하거나, 교체하거나, 숨기거나, 새 멤버로 보완할 수 있습니다.
- 상속된 필드는 다른 필드와 마찬가지로 직접 사용할 수 있습니다.
- 슈퍼클래스에는 없는 새로운 필드를 서브클래스에서 선언할 수 있습니다.
- 상속된 메서드는 그대로 직접 사용할 수 있습니다.
- 우리는 새로운 것을 쓸 수 있습니다 사례 슈퍼클래스의 메소드와 동일한 시그니처를 갖는 서브클래스의 메소드 재정의 (위의 예에서와 같이 toString() 메서드가 재정의됩니다).
- 우리는 새로운 것을 쓸 수 있습니다 공전 슈퍼클래스의 메소드와 동일한 시그니처를 갖는 서브클래스의 메소드 숨김 그것.
- 슈퍼클래스에는 없는 새로운 메소드를 서브클래스에서 선언할 수 있습니다.
- 암시적으로 또는 키워드를 사용하여 슈퍼클래스의 생성자를 호출하는 서브클래스 생성자를 작성할 수 있습니다. 감독자 .
Java 상속의 장점:
- 코드 재사용성: 상속을 통해 코드 재사용이 가능하고 작성해야 하는 코드의 양이 줄어듭니다. 하위 클래스는 상위 클래스의 속성과 메서드를 재사용하여 코드 중복을 줄일 수 있습니다.
- 추상화: 상속을 사용하면 관련 클래스 그룹에 대한 공통 인터페이스를 정의하는 추상 클래스를 만들 수 있습니다. 이는 추상화 및 캡슐화를 촉진하여 코드를 더 쉽게 유지 관리하고 확장할 수 있게 해줍니다.
- 클래스 계층 구조: 상속을 통해 실제 객체와 그 관계를 모델링하는 데 사용할 수 있는 클래스 계층 구조를 만들 수 있습니다.
- 다형성: 상속은 객체가 여러 형태를 취할 수 있는 능력인 다형성을 허용합니다. 하위 클래스는 상위 클래스의 메서드를 재정의할 수 있으며 이를 통해 동작을 다양한 방식으로 변경할 수 있습니다.
Java 상속의 단점:
- 복잡성: 상속으로 인해 코드가 더 복잡해지고 이해하기 어려워질 수 있습니다. 상속 계층 구조가 깊거나 다중 상속이 사용되는 경우 특히 그렇습니다.
- 긴밀한 결합: 상속은 슈퍼클래스와 하위클래스 사이에 긴밀한 결합을 만들어 하위클래스에 영향을 주지 않고 슈퍼클래스를 변경하기 어렵게 만듭니다.
결론
아래 기사에서 언급된 몇 가지 중요한 사항을 확인해 보겠습니다.
- 기본 슈퍼클래스 : 제외하고 물체 슈퍼클래스가 없는 클래스는 모든 클래스에 단 하나의 직접 슈퍼클래스(단일 상속)가 있습니다. 다른 명시적인 슈퍼클래스가 없으면 모든 클래스는 암시적으로 Object 클래스의 하위 클래스입니다.
- 슈퍼클래스는 하나만 가능합니다: 슈퍼클래스는 하위클래스를 얼마든지 가질 수 있습니다. 그러나 하위 클래스는 다음을 가질 수 있습니다. 하나 슈퍼클래스. 이는 Java가 클래스를 통한 다중 상속을 지원하지 않기 때문입니다. 인터페이스를 사용하더라도 Java에서는 다중 상속이 지원됩니다.
- 생성자 상속: 하위 클래스는 상위 클래스에서 모든 멤버(필드, 메서드 및 중첩 클래스)를 상속합니다. 생성자는 멤버가 아니므로 하위 클래스에서 상속되지 않지만 상위 클래스의 생성자는 하위 클래스에서 호출될 수 있습니다.
- 비공개 멤버 상속: 하위 클래스는 상위 클래스의 전용 멤버를 상속하지 않습니다. 그러나 슈퍼클래스에 비공개 필드에 액세스하기 위한 공개 또는 보호 메소드(예: getter 및 setter)가 있는 경우 이러한 메소드를 하위 클래스에서도 사용할 수 있습니다.
상속 관련 FAQ
1. 상속 자바란 무엇입니까?
상속은 한 클래스가 상위 클래스의 메서드와 필드를 재사용할 수 있는 다른 클래스로부터 상속받는 OOP의 개념입니다.
2. Java의 4가지 상속 유형은 무엇입니까?
단일, 다중, 다중 레벨, 계층적 및 하이브리드가 있습니다
3. 확장 키워드의 용도는 무엇입니까?
Extend 키워드는 한 클래스를 다른 클래스로 상속하는 데 사용됩니다.
4. Java에서 상속의 예는 무엇입니까?
Java 상속의 실제 예는 다음과 같습니다.
차량 그룹을 고려하십시오. 버스, 자동차, 트럭에 대한 클래스를 만들어야 합니다. FuelAmount(), capacity(), applyBrakes() 메서드는 세 클래스 모두에서 동일합니다.
사용된 참고자료:
- Kathy Sierra와 Bert Bates의 Head First Java
- Java: Herbert Schildt의 초보자 가이드
- Java: Herbert Schildt의 완전한 참고서
- Joshua Bloch의 효과적인 Java
- Java: Jim Waldo의 좋은 부분.