logo

Java의 상속

  1. 계승
  2. 상속 유형
  3. Java에서 클래스의 경우 다중 상속이 불가능한 이유는 무엇입니까?

Java의 상속 하나의 객체가 상위 객체의 모든 속성과 동작을 획득하는 메커니즘입니다. 그것은 중요한 부분입니다 OOP (객체 지향 프로그래밍 시스템).

Java 상속의 기본 개념은 새로운 것을 생성할 수 있다는 것입니다. 클래스 기존 클래스를 기반으로 구축되었습니다. 기존 클래스에서 상속하면 상위 클래스의 메서드와 필드를 재사용할 수 있습니다. 또한 현재 클래스에 새 메서드와 필드를 추가할 수도 있습니다.

상속은 다음을 나타냅니다. IS-A 관계 이는 다음으로도 알려져 있습니다. 부모-자식 관계.

자바에서 상속을 사용하는 이유

상속에 사용되는 용어

    수업:클래스는 공통 속성을 갖는 개체 그룹입니다. 객체가 생성되는 템플릿 또는 청사진입니다.하위 클래스/하위 클래스:서브클래스는 다른 클래스를 상속받는 클래스입니다. 파생 클래스, 확장 클래스 또는 자식 클래스라고도 합니다.슈퍼 클래스/부모 클래스:슈퍼클래스는 서브클래스가 기능을 상속받는 클래스입니다. 기본 클래스 또는 부모 클래스라고도 합니다.재사용 성:이름에서 알 수 있듯이 재사용성은 새 클래스를 생성할 때 기존 클래스의 필드와 메서드를 쉽게 재사용할 수 있게 해주는 메커니즘입니다. 이전 클래스에 이미 정의된 것과 동일한 필드 및 메서드를 사용할 수 있습니다.

Java 상속의 구문

 class Subclass-name extends Superclass-name { //methods and fields } 

그만큼 키워드 확장 기존 클래스에서 파생되는 새 클래스를 만들고 있음을 나타냅니다. '확장'의 의미는 기능을 증가시키는 것입니다.

자바 용어로는 상속받은 클래스를 부모(parent) 또는 슈퍼클래스(superclass)라고 하고, 새로운 클래스를 자식(child) 또는 서브클래스(subclass)라고 한다.


Java 상속 예

Java의 상속

위 그림에 표시된 것처럼 Programmer는 하위 클래스이고 Employee는 슈퍼 클래스입니다. 두 클래스의 관계는 다음과 같습니다. 프로그래머 IS-A 직원 . 이는 프로그래머가 직원 유형임을 의미합니다.

 class Employee{ float salary=40000; } class Programmer extends Employee{ int bonus=10000; public static void main(String args[]){ Programmer p=new Programmer(); System.out.println('Programmer salary is:'+p.salary); System.out.println('Bonus of Programmer is:'+p.bonus); } } 
지금 테스트해보세요
 Programmer salary is:40000.0 Bonus of programmer is:10000 

위의 예에서 Programmer 객체는 Employee 클래스뿐만 아니라 자신의 클래스 필드에도 액세스할 수 있습니다(예: 코드 재사용성).


자바의 상속 유형

클래스를 기반으로 Java에는 단일 상속, 다중 레벨 상속, 계층 상속의 세 가지 유형이 있습니다.

Java 프로그래밍에서는 다중 상속과 하이브리드 상속이 인터페이스를 통해서만 지원됩니다. 인터페이스에 대해서는 나중에 배우겠습니다.

Java의 상속 유형

참고: Java에서는 클래스를 통한 다중 상속이 지원되지 않습니다.

하나의 클래스가 여러 클래스를 상속하는 경우를 다중 상속이라고 합니다. 예를 들어:

자바의 다중 상속

단일 상속의 예

클래스가 다른 클래스를 상속받는 경우를 클래스라고 합니다. 단일 상속 . 아래 예제에서 Dog 클래스는 Animal 클래스를 상속하므로 단일 상속이 있습니다.

파일: TestInheritance.java

 class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void bark(){System.out.println('barking...');} } class TestInheritance{ public static void main(String args[]){ Dog d=new Dog(); d.bark(); d.eat(); }} 

산출:

 barking... eating... 

다단계 상속의 예

상속의 사슬이 있을 때 이를 다음과 같이 부릅니다. 다단계 상속 . 아래 예제에서 볼 수 있듯이 BabyDog 클래스는 Dog 클래스를 상속하고 다시 Animal 클래스를 상속하므로 다단계 상속이 있습니다.

파일: TestInheritance2.java

 class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void bark(){System.out.println('barking...');} } class BabyDog extends Dog{ void weep(){System.out.println('weeping...');} } class TestInheritance2{ public static void main(String args[]){ BabyDog d=new BabyDog(); d.weep(); d.bark(); d.eat(); }} 

산출:

 weeping... barking... eating... 

계층적 상속의 예

두 개 이상의 클래스가 단일 클래스를 상속받는 경우를 다음과 같이 부릅니다. 계층적 상속 . 아래 예제에서 Dog 및 Cat 클래스는 Animal 클래스를 상속하므로 계층적 상속이 있습니다.

파일: TestInheritance3.java

 class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void bark(){System.out.println('barking...');} } class Cat extends Animal{ void meow(){System.out.println('meowing...');} } class TestInheritance3{ public static void main(String args[]){ Cat c=new Cat(); c.meow(); c.eat(); //c.bark();//C.T.Error }} 

산출:

 meowing... eating... 

Q) Java에서는 다중 상속이 지원되지 않는 이유는 무엇입니까?

복잡성을 줄이고 언어를 단순화하기 위해 Java에서는 다중 상속이 지원되지 않습니다.

A, B, C가 세 클래스인 시나리오를 생각해 보세요. C 클래스는 A 및 B 클래스를 상속합니다. A 클래스와 B 클래스의 메서드가 동일한 경우 이를 자식 클래스 객체에서 호출하면 A 클래스나 B 클래스의 메서드를 호출하기가 모호해집니다.

컴파일 시간 오류는 런타임 오류보다 낫기 때문에 Java는 2개의 클래스를 상속하는 경우 컴파일 시간 오류를 렌더링합니다. 따라서 동일한 방법을 사용하든 다른 방법을 사용하든 컴파일 시간 오류가 발생합니다.

 class A{ void msg(){System.out.println('Hello');} } class B{ void msg(){System.out.println('Welcome');} } class C extends A,B{//suppose if it were public static void main(String args[]){ C obj=new C(); obj.msg();//Now which msg() method would be invoked? } } 
지금 테스트해보세요
 Compile Time Error