자바 상속
상속은 계층적 클래스 생성을 허용하므로 Java 객체 지향 프로그래밍 기술의 초석입니다. 상속은 한 객체가 다른 객체로부터 속성을 얻는 과정으로 이해될 수 있습니다.
클래스 A가 클래스 B의 상위 클래스이고 클래스 B가 클래스 C의 상위 클래스인 경우 C는 A의 하위 클래스이고 클래스 C는 클래스 A에서 상속된다고 합니다. Java에서 클래스 상속은 단일 상속입니다. 즉, 하위 클래스는 하나의 상위 클래스만 가질 수 있습니다. 상속에서 가장 일반적으로 사용되는 두 가지 키워드는 확장과 구현입니다.
이 두 키워드의 사용은 한 개체가 다른 개체와 IS-A(is one) 관계를 갖는지 여부를 결정합니다.
이 두 키워드를 사용하면 하나의 개체를 달성하여 다른 개체의 속성을 얻을 수 있습니다.
모든 Java 클래스는 java.lang.Object 클래스에서 상속되므로 Object는 모든 클래스의 조상 클래스이며, Object를 제외한 모든 클래스에는 상위 클래스가 있어야 합니다.
extends 키워드를 통해 클래스가 다른 클래스를 상속한다고 선언할 수 있습니다. 일반적인 형식은 다음과 같습니다.
// A.java public class A { private int i; protected int j; public void func() { } } // B.java public class B extends A { }
위 코드 조각은 B가 A에서 상속되고 B가 A의 하위 클래스임을 보여줍니다. 그리고 A는 Object의 하위 클래스로 여기서는 명시적인 선언 없이 선언할 수 있습니다.
하위 클래스로서 B의 인스턴스는 A의 모든 멤버 변수를 가지지만 A의 캡슐화를 보장하는 전용 멤버 변수 B에 대한 액세스 권한은 없습니다.
IS-A는 한 개체가 다른 개체의 분류임을 의미합니다.
다음은 키워드 확장을 이용한 상속 구현입니다.
public class Animal{ } public class Mammal extends Animal{ } public class Reptile extends Animal{ } public class Dog extends Mammal{ }
위의 예를 바탕으로 다음 문장이 정확합니다.
-
Animal 클래스는 Mammal 클래스의 상위 클래스입니다.
- Animal 클래스는 Reptile 클래스의 부모 클래스입니다.
- Mammal 클래스와 Reptile 클래스는 Animal 클래스의 하위 클래스입니다.
- Dog 클래스는 Mammal 클래스와 Animal 클래스의 하위 클래스입니다.
- 위 예에서 IS-A 관계를 다음과 같이 분석합니다.
-
포유류 IS-A 동물
- 파충류 IS-A 동물
- Dog IS-A Mammal
- 따라서: Dog IS-A Animal
키워드
extends를 사용하면 하위 클래스는 상위 클래스의 모든 메서드와 속성을 상속할 수 있지만 프라이빗(프라이빗) 메서드와 속성은 사용할 수 없습니다. . instanceof 연산자를 사용하여 Mammal IS-A Animal
public class Dog extends Mammal{ public static void main(String args[]){ Animal a = new Animal(); Mammal m = new Mammal(); Dog d = new Dog(); System.out.println(m instanceof Animal); System.out.println(d instanceof Mammal); System.out.println(d instanceof Animal); } }
위 예제의 컴파일 및 실행 결과는 다음과 같습니다.
true true true
extends
키워드를 도입한 후, implements 키를 보세요. IS-A 관계를 표현하기 위해 단어가 어떻게 사용되는지 살펴보세요. Implements 키워드는 클래스가 인터페이스를 상속할 때 사용됩니다.
이 경우에는 extends 키워드를 사용할 수 없습니다. instanceof 연산자를 사용하여 Mammal 및 dog 객체가 Animal 클래스의 인스턴스인지 확인할 수 있습니다. 위 예제의 컴파일 및 실행 결과는 다음과 같습니다. HAS-A는 클래스와 해당 멤버 간의 종속 관계를 나타냅니다. 이는 코드 재사용에 도움이 되고 코드 오류를 줄여줍니다. Van 클래스와 Speed 클래스는 HAS-A 관계(Van has a Speed)이므로 Speed 클래스의 코드를 모두 Van 클래스에 붙여넣을 필요가 없으며, Speed 클래스는 여러 응용프로그램에서 재사용될 수도 있습니다. 객체 지향 기능에서 사용자는 클래스가 내부적으로 어떻게 구현되는지 걱정할 필요가 없습니다. Van 클래스는 사용자에게 구현 세부 정보를 숨깁니다. 따라서 사용자는 특정 기능을 완료하기 위해 Van 클래스를 호출하는 방법만 알면 되며 Van 클래스가 해당 작업을 수행하는지 아니면 다른 클래스를 호출하여 수행하는지 알 필요가 없습니다. 이러한 작업. Java는 단일 상속만 지원합니다. 즉, 클래스는 여러 클래스를 상속할 수 없습니다. 다음 관행은 불법입니다. Java는 단일 상속(기본 클래스 및 추상 클래스 상속)만 지원하지만 인터페이스를 사용하여 이를 구현할 수 있습니다(구현할 다중 상속 인터페이스). 스크립트 구조는 다음과 같습니다. Instance
public interface Animal {}
public class Mammal implements Animal{
}
public class Dog extends Mammal{
}
instanceof 키워드
interface Animal{}
class Mammal implements Animal{}
public class Dog extends Mammal{
public static void main(String args[]){
Mammal m = new Mammal();
Dog d = new Dog();
System.out.println(m instanceof Animal);
System.out.println(d instanceof Mammal);
System.out.println(d instanceof Animal);
}
}
true
true
true
HAS-A 관계
Example
public class Vehicle{}
public class Speed{}
public class Van extends Vehicle{
private Speed sp;
}
public class extends Animal, Mammal{}