what is inheritance java tutorial with examples
이 자습서에서는 Java의 상속 개념, '확장'및 '수퍼'키워드, 하위 클래스, 수퍼 클래스, Is-A, HAS-A 관계 등과 같은 관련 용어를 설명합니다.
Java의 Abstraction, Encapsulation 및 Polymorphism이라는 OOP의 세 가지 기둥에 대해 배운 후 OOP의 마지막 기둥, 즉 상속에 도달했습니다.
이 튜토리얼을 시작으로 다음 두 개의 튜토리얼에서 Java의 상속에 대해 설명합니다.
학습 내용 :
자바의 상속
Java의 상속은 클래스의 한 개체가 다른 개체의 동작과 속성을 획득하는 기술 또는 프로세스로 정의 할 수 있습니다. 이것은 클래스를 상속하거나 두 클래스 간의 관계를 설정하여 수행됩니다.
예를 들면 개구리는 양서류입니다. 양서류 클래스의 다른 동물들과 마찬가지로 개구리는 다른 동물들에게 공통적 인 많은 특성을 가질 수 있습니다. 그래서 여기 양서류는 종이 고 개구리와 같은 동물은 그 구성원입니다.
OOP를 사용하여 소프트웨어 표현에서 양서류 종과 그 구성원을 나타내야하는 경우, 일반적으로 양서류에 공통적 인 특성이나 행동을 포함하는 'Amphibian'클래스를 개발할 것입니다.
이렇게하면 우리가 설명하는 모든 양서류 동물의 공통된 속성과 행동을 복제 할 필요가 없습니다. 아래 그림과 같이 양서류 동물에 대한 클래스를 각각 직접 만들고 Amphibian 클래스에서 상속합니다.
따라서 '상속'기능의 기본 개념은 기존 클래스에서 상속하여 새 클래스를 만들 수 있다는 것입니다. 이미 존재하는 클래스에서 상속함으로써 이러한 클래스의 속성과 동작을 사용할 수 있습니다. 게다가 새 클래스에 더 많은 속성 및 / 또는 동작을 추가 할 수 있습니다.
상속 기능은“ 부모 자식 ”연결 또는 Java의 관계. 새 클래스가 상속되는 클래스를 ' 부모 클래스 ”새 클래스는“ 어린이 클래스 ”.
상속이 주로 사용됩니다.
- 에 대한 메서드 재정의 우리가 달성 할 수 있도록 런타임 다형성 .
- 에 코드 재사용 . 이미 존재하는 클래스에서 상속함으로써 우리는 재사용 성 코드
상속에 사용되는 공통 용어
- 재사용 성: 새 클래스가 기존 클래스의 필드 또는 속성 및 메서드를 재사용하는 메커니즘입니다.
- 수업: 클래스는 공통 속성을 가진 개체의 모음입니다. 클래스는 개체에 대한 템플릿 또는 청사진으로 볼 수 있습니다.
- 하위 클래스 / 하위 클래스 : 다른 클래스에서 상속되는 클래스는 하위 클래스, 자식 클래스 또는 파생 클래스입니다.
- 수퍼 클래스 / 부모 클래스 : 속성과 메서드를 얻기 위해 다른 클래스에서 상속하는 클래스를 부모 클래스 또는 수퍼 클래스 또는 기본 클래스라고합니다.
다음 상속 계층 구조는 수퍼 클래스와 서브 클래스를 보여주는 예입니다.
OrganisationName 및 EmployeeId 필드가있는 Employee 클래스가 있습니다. 또한 직원 이름, 부서 및 기타 직원 세부 정보와 같은 다른 필드를 가질 수 있습니다.
그런 다음 해당 분야의 급여와 특전이 포함 된 'SoftwareDeveloper'라는 또 다른 클래스를 파생합니다. SoftwareDeveloper 클래스는 Employee 클래스에서 상속되므로 Employee 클래스의 속성도 가져옵니다.
위의 다이어그램에 표시된 것처럼 여기서 Employee 클래스는 Super 또는 Base 클래스이고 SoftwareDeveloper는 하위 클래스 또는 파생 클래스입니다.
자바의‘확장’키워드
Java에서 키워드 'extends'는 클래스를 상속하는 데 사용됩니다.
Java 상속의 일반적인 구문은 다음과 같습니다.
class SubClass extends SuperClass { //subclass methods and fields }
위와 같이 'extends'키워드는 클래스 선언 구문에서 클래스 이름 뒤에 나타납니다.
키워드 '확장'은 'SuperClass'의 속성과 동작을 상속 할 새 클래스 'SubClass'를 만들고 있음을 나타냅니다. 즉, extends 키워드는 SuperClass의 기존 기능에 새 클래스 SubClass를 구축하고 있음을 나타냅니다.
'extends'키워드로 구현 된 상속은 클래스 상속입니다. 다음 자습서에서는 인터페이스를 상속 할 수있는 또 다른 키워드 '구현'에 대해 설명합니다.
위에서 설명한 Employee-SoftwareDeveloper 클래스의 예는 다음과 같이 나타낼 수 있습니다.
class Employee{ String OrganizationName; int EmployeeId; } class SoftwareDeveloper extends Employee{ float Salary; float Perks; }
IS-A와 HAS-A 관계
다음 클래스 구조를 고려하십시오.
class Mammal{ } class Cow extends Mammal{ }
그렇다면 위의 구조를 어떻게 해석 할 수 있을까요? Cow 클래스가 Mammal을 확장하거나 상속함에 따라“Cow 이다 Mammal '또는'Cow 일종의 포유류”. 그러므로 우리가 그러한 관계를 표현할 때마다 그 특정 관계가“IS_A”관계입니다.
위의 구조에서 우리는 한 종류가 다른 종류라는 사실을 표현하기 위해 상속 계층 구조를 사용했습니다. 그래서 위의 구조에서 우리는 암소와 포유류의 관계를 나타 내기 위해 상속을 사용했습니다.
마찬가지로 다음과 같이 더 많은 IS-A 관계를 표현할 수 있습니다.
위에 주어진 것은 Java에서 상속을 사용하여 표현할 수있는 관계의 몇 가지 일반적인 예입니다.
일반적으로 IS-A 종류의 관계는 상속을 사용하여 표현할 수 있습니다.
이제 아래 예를 보겠습니다.
위의 다이어그램에서 차량이 엔진과 브레이크의 두 부분으로 구성되어있는 것을 볼 수 있습니다. 그렇다면이 시나리오를 어떻게 말로 표현할 수 있을까요?
우리는“차량 포함 엔진과 차량 포함 브레이크”.
그래서 우리가 여기서 표현하는 것은 'IS-A'관계가 아니라 한 객체를 다른 객체의 일부로 지정하는 포함 관계입니다.
경험 5 년 동안 pl SQL 인터뷰 질문
위의 예에서 엔진은 의 일부 차량. 그것은 ' 거의 ”차량. 이것이 ' HAS-A ”또는 Java의 포함 또는 구성 관계. Java의 Has-a 관계는 객체를 클래스의 구성원으로 포함하여 표현됩니다.
따라서 위의 동일한 차량 예를 따르면 다음과 같이 표현할 수 있습니다.
class Engine{ } class Brake { } class Vehicle{ Engine e; Brake b; }
따라서 차량에는 엔진과 브레이크가 있습니다. 위의 방식으로 관계를 표현함으로써 우리는 엔진이나 브레이크의 내부 구현에 관심이 없습니다. 차량 클래스는 Engine 및 Brake 클래스가 무엇이 필요한지 알려주고 해당 클래스가이를 제공합니다.
IS-A 관계와 마찬가지로 HAS-A 관계도 코드를 재사용하는 데 유용합니다.
이 자습서에서는 상속 (IS-A)에 대해 자세히 설명하고 다음 자습서에서는 포함 또는 구성 (HAS-A)에 대해 설명합니다.
Java 상속 예
상속을 보여주기 위해 Java로 간단한 예제를 구현해 보겠습니다.
//example class demonstrating Inheritance in Java class BaseClass { public void display() { System.out.println('BaseClass::Display'); } } //create a new class from BaseClass class DerivedClass extends BaseClass { public void print() { System.out.println('DerivedClass::print'); } } class Main { public static void main(String() args) { //create an object of DerivedClass DerivedClass d1 = new DerivedClass(); d1.display(); //call BaseClass method d1.print(); //call DerivedClass method } }
산출:
위의 프로그램은 상속의 간단한 예를 보여줍니다. 하나의 메서드가있는 BaseClass가 선언됩니다. 그런 다음 BaseClass를 확장하는 다른 클래스 DerivedClass가 선언됩니다. 이 클래스에는 하나의 메서드도 있습니다.
프로그램의 주요 메소드에서 DerivedClass 객체를 생성하고이 객체를 사용하여 BaseClass와 DerivedClass 메소드를 호출합니다.
출력에는 두 가지 방법으로 인쇄 된 메시지가 표시됩니다. DerivedClass는 BaseClass를 확장하고 BaseClass 메서드는 public이므로 DerivedClass에 표시됩니다.
자바의‘super’키워드
상속에서 우리는 수퍼 클래스 또는 부모 클래스와 자식 클래스를 다룹니다. 변수, 메서드 또는 생성자를 포함한 수퍼 클래스 멤버에 중간에 액세스해야하는 경우 몇 가지 메커니즘이 필요합니다. 기본 클래스 멤버에 액세스하는이 메커니즘은 'super'키워드를 사용하여 Java에서 제공됩니다.
그렇다면 Java에서 'super'키워드를 사용하는 시나리오는 무엇입니까?
다음은 '슈퍼'키워드가 도움이 될 수있는 시나리오입니다.
- 수퍼 /베이스 클래스와 하위 / 파생 클래스가 멤버에 대해 동일한 이름을 가지고 있고 수퍼 클래스 멤버에 액세스하려는 경우 super 키워드를 사용합니다.
- 서브 클래스에서 슈퍼 클래스 생성자에 액세스하려면 super 키워드를 사용하여 슈퍼 클래스 키워드를 호출합니다.
위의 그림에서는 상속 구조를 보여주었습니다. 기본 클래스와 파생 클래스에는 문자열 변수 myStr이 있습니다. 파생 클래스에는 printStr () 함수가 있습니다. 이 방법에서는 'super'키워드를 사용하여 기본 클래스에서 myStr 변수에 액세스했습니다.
그림에서는 기본 클래스 멤버 변수와 파생 클래스 변수를 가리키는 화살표를 보여줍니다.
이제 super 키워드를 사용하여 다양한 슈퍼 클래스 멤버에 액세스하는 프로그래밍 예제를 살펴 보겠습니다.
# 1) 수퍼 클래스 멤버 변수 액세스
다음 Java 프로그램은 기본 클래스의 변수에 액세스하기 위해 'super'키워드를 사용하는 방법을 보여줍니다.
class Baseclass { String myStr; } class Subclass extends Baseclass { String myStr; public void printdetails() //Baseclass and Subclass have variables with same name { super.myStr = 'Super'; //refers to parent class member myStr = 'Sub'; System.out.println('Superclass myStr :' + super.myStr+' and Subclass myStr:'+myStr); } } class Main{ public static void main(String() args) { Subclass cobj = new Subclass(); cobj. printdetails (); } }
산출:
위 프로그램은 기본 클래스와 파생 클래스 모두에서 동일한 이름으로 멤버 변수를 선언 할 때 파생 클래스에서 기본 클래스의 멤버 변수에 액세스하는 방법을 보여줍니다.
여기에는 기본 클래스와 파생 클래스에서 선언 된 myStr 변수가 있습니다. printdetails 메서드에서 'super.myStr'을 사용하여 기본 클래스의 myStr 변수를 참조하고 파생 된 클래스 변수 myStr은 한정자없이 직접 액세스합니다.
# 2) 슈퍼 클래스 접근 방법
다음으로, 기본 클래스의 메서드와 파생 클래스의 메서드가 동일한 이름을 가질 때 기본 클래스 메서드를 호출하는 방법을 살펴 보겠습니다.
다음 프로그램이이를 보여줍니다.
class Parent { String myStr; public void print() //parent class method { myStr = 'Parent class myStr'; System.out.println(myStr); } } class Child extends Parent { String myStr; public void print() //child class method with same name as parent { super.print(); //call Parent class print() method myStr = 'Child class myStr'; System.out.println(myStr); } } class Main{ public static void main(String() args) { Child c_obj = new Child(); c_obj.print (); } }
산출:
# 3) 수퍼 클래스 생성자 액세스
한 클래스를 다른 클래스에서 상속 할 때 생성자는 상속되지 않습니다.
파생 된 클래스 생성자를 실행하기 전에 슈퍼 클래스 생성자의 명령을 실행하려면 'super'키워드를 사용하여 슈퍼 클래스 생성자를 호출 할 수도 있습니다.
슈퍼 클래스 생성자를 호출하기 위해 메서드 호출을 사용합니다.
super (매개 변수 목록…)
다음 메소드는 Java의 수퍼 생성자에 대한 액세스를 보여줍니다.
class Parent { String myStr; public Parent(String name) //base class constructor { myStr = name; } } class Child extends Parent { String myStr; public Child(String name1, String name2) { super(name1); //call base class constructor and pass argument value this.myStr = name2; } public void printDetails() //print details of both constructors { System.out.println('From base class constructor: ' +super.myStr); System.out.println('From derived class constructor: ' + myStr); } } class Main{ public static void main(String() args) { Child cobj = new Child('Super constructor string','Child constructor string'); cobj.printDetails(); } }
산출:
위의 프로그램에서 볼 수 있듯이 파생 클래스 생성자에서 수퍼 클래스의 생성자를 호출했습니다. 규칙에 따라 슈퍼 클래스 생성자에 액세스 할 때마다 파생 클래스 생성자에서 첫 번째 문이어야합니다.
기본 클래스에는 매개 변수화 된 생성자가 있으므로 생성자를 호출하는 동안 적절한 매개 변수를 super 호출에 전달합니다.
위와 같이 super 생성자에 대한 명시 적 호출이 없으면 컴파일러는 항상 super ()에 대한 암시 적 호출을 자동으로 추가합니다. 그러나 이것은 수퍼 클래스의 기본 생성자에 대한 호출입니다.
자주 묻는 질문
Q # 1) Java에서 상속이란 무엇입니까?
대답: 한 클래스가 다른 클래스의 속성과 동작을 획득하는 프로세스를 상속이라고합니다. Java에서는 'extends'키워드를 사용하여 한 클래스가 다른 클래스에 상속됩니다.
상속은 중복 코드를 작성하지 않고도 상속 된 클래스의 기존 속성과 동작을 획득하고 사용할 수 있으므로 상속을 통해 코드의 재사용 성을 촉진합니다.
Q # 2) Java에서 상속이 사용되는 이유는 무엇입니까?
대답: 상속은 주로 응용 프로그램의 재사용 성을 향상시키는 데 사용됩니다. 상속을 사용하여 응용 프로그램에서 준비된 클래스를 사용할 수 있습니다. 기능이 준비되어 있다면 코드를 작성할 필요가 없습니다.
상속의 두 번째 용도는 메서드 재정의입니다. 런타임 다형성을 구현하기 위해 상속을 사용합니다.
Q # 3) 상속의 장점은 무엇입니까?
대답: 재사용 성은 상속의 주요 이점입니다. 상속을 통해 코드를 공유하면 가독성이 향상되고 코드 구성이 향상됩니다.
상속을 사용한 메서드 재정의를 통해 런타임 다형성을 달성 할 수도 있습니다.
Q # 4) 상속의 특징은 무엇입니까?
대답: 이전 세대에서 얻은 특성이나 특징은 상속을 통해 수행됩니다. 예를 들면 많은 가정에서 발생하는 빛의 눈 특성은 상속의 한 예입니다.
프로그래밍 관점에서 상속은 재사용 가능성 및 메서드 재정의 기능을 제공합니다.
Q # 5) 슈퍼 ()가 필요합니까?
대답: 아니요. super ()를 호출하지 않으면 컴파일러가이를 암시 적으로 수행하기 때문입니다. 그러나 super ()의 암시 적 호출이 기본 기본 클래스 생성자입니다. 따라서 기본 클래스에서 매개 변수화 된 생성자가 필요하면 명시 적으로 호출해야합니다.
Windows 10을위한 최고의 정리 프로그램
결론
이 자습서에서는 Java의 상속 개념을 소개했습니다. 상속은 다른 클래스에있는 한 클래스의 속성과 동작을 획득하는 프로세스입니다. 여기서 상속에서 사용하는 기본 정의와 용어에 대해 논의했습니다.
또한 Java의 Is-A 및 Has-A 관계에 대해서도 논의했습니다. 상속은 Is-A 관계를 구현하는 데 사용됩니다.
그런 다음 상속과 관련하여 사용되는 Java의 '확장'및 '수퍼'키워드에 대해 논의했습니다. Extends는 상속을 구현하는 데 사용됩니다. super 키워드는 파생 클래스의 기본 클래스 생성자, 메서드 또는 변수를 참조하는 데 사용됩니다.
=> 여기에서 완벽한 Java 교육 가이드를 확인하십시오.