Creative Saplings

상속

9월 6, 2020
No Comments

이전 학습에서 상속이 여러 번 언급 된 것을 보았습니다. Java 언어에서 클래스는 다른 클래스에서 파생 될 수 있으므로 해당 클래스의 필드와 메서드를 상속 할 수 있습니다.

정의 : 다른 클래스에서 파생 된 클래스를 하위 클래스라고합니다 (또한 파생 클래스, 확장 클래스 또는 하위 클래스). 하위 클래스가 파생 된 클래스를 수퍼 클래스 (기본 클래스 또는 상위 클래스라고도 함)라고합니다.
슈퍼 클래스가없는 Object를 제외하고 모든 클래스에는 단 하나의 직접 수퍼 클래스 (단일 상속). 다른 명시 적 슈퍼 클래스가없는 경우 모든 클래스는 암시 적으로 Object의 하위 클래스입니다.
클래스는 클래스에서 파생 된 클래스에서 파생 된 클래스에서 파생 될 수 있습니다. 그리고 궁극적으로 최상위 클래스 인 Object에서 파생됩니다. 이러한 클래스는 Object까지 확장되는 상속 체인의 모든 클래스의 후손이라고합니다.

상속의 개념은 간단하지만 강력합니다. 새 클래스를 만들고 싶고 원하는 코드가 이미 포함 된 클래스가있는 경우 기존 클래스에서 새 클래스를 파생 할 수 있습니다. . 이렇게하면 기존 클래스의 필드와 메서드를 직접 작성 (및 디버그!)하지 않고도 재사용 할 수 있습니다.

하위 클래스는 다음에서 모든 멤버 (필드, 메서드 및 중첩 클래스)를 상속합니다. 그 수퍼 클래스. 생성자는 멤버가 아니므로 하위 클래스에서 상속되지 않지만 수퍼 클래스의 생성자는 하위 클래스에서 호출 할 수 있습니다.

Java 플랫폼 클래스 계층

iv id = java.lang 패키지에 정의 된 “e946c849b8″>

클래스는 작성한 클래스를 포함하여 모든 클래스에 공통적 인 동작을 정의하고 구현합니다. Java 플랫폼에서 많은 클래스는 Object에서 직접 파생되고 다른 클래스는 이러한 클래스 중 일부에서 파생되는 식으로 클래스 계층을 형성합니다.

Java 플랫폼의 모든 클래스는 객체의 자손입니다.

계층 구조의 맨 위에있는 Object는 모든 클래스 중에서 가장 일반적입니다. 계층 구조의 맨 아래에있는 클래스는보다 특수한 동작을 제공합니다.

상속의 예

다음은 Bicycle 클래스 :

iv id = “5010a393ca의 하위 클래스 인 MountainBike 클래스에 대한 클래스 선언 “>

는 다음과 같습니다.

public class MountainBike extends Bicycle { // the MountainBike subclass adds one field public int seatHeight; // the MountainBike subclass has one constructor public MountainBike(int startHeight, int startCadence, int startSpeed, int startGear) { super(startCadence, startSpeed, startGear); seatHeight = startHeight; } // the MountainBike subclass adds one method public void setHeight(int newValue) { seatHeight = newValue; } }

MountainBike 상속 Bicycle의 모든 필드와 메서드를 추가하고 seatHeight 필드와이를 설정하는 메서드를 추가합니다. 생성자를 제외하고는 4 개의 필드와 5 개의 메서드를 사용하여 완전히 처음부터 새로운 MountainBike 클래스를 작성한 것과 같습니다. 그러나 모든 작업을 수행 할 필요는 없습니다. Bicycle 클래스의 메서드가 복잡하고 디버깅하는 데 상당한 시간이 걸린 경우 특히 유용합니다.

하위 클래스에서 수행 할 수있는 작업

하위 클래스는 하위 클래스가 어떤 패키지에 있든 상관없이 부모의 모든 공용 및 보호 멤버를 상속합니다. 하위 클래스가 해당 하위 클래스와 동일한 패키지에있는 경우 또한 부모의 패키지-비공개 구성원을 상속합니다. 상속 된 구성원을 그대로 사용하거나, 바꾸거나, 숨기거나, 새 구성원으로 보완 할 수 있습니다.

  • 상속 된 필드는 다른 필드와 마찬가지로 직접 사용할 수 있습니다.
  • 수퍼 클래스의 필드와 동일한 이름을 사용하여 하위 클래스의 필드를 선언하여 숨길 수 있습니다 (권장하지 않음).
  • 수퍼 클래스에없는 하위 클래스의 새 필드를 선언 할 수 있습니다.
  • 상속 된 메서드는 그대로 직접 사용할 수 있습니다.
  • 그 하위 클래스 슈퍼 클래스와 동일한 시그니처가 있으므로이를 재정의합니다.
  • 슈퍼 클래스에있는 것과 동일한 시그니처를 가진 새 정적 메서드를 하위 클래스에 작성하여 숨길 수 있습니다.
  • li>
  • 수퍼 클래스에없는 하위 클래스에서 새 메서드를 선언 할 수 있습니다.
  • 암시 적으로 또는 super.

이 강의의 다음 섹션에서는 이러한 주제에 대해 확장합니다.

슈퍼 클래스의 비공개 회원

하위 클래스는 부모 클래스의 private 멤버를 상속하지 않습니다. 그러나 슈퍼 클래스에 private 필드에 액세스하기위한 public 또는 protected 메서드가있는 경우 하위 클래스에서도 사용할 수 있습니다.

중첩 된 클래스는 필드와 메서드 모두 포함하는 클래스의 모든 private 멤버에 액세스 할 수 있습니다. 따라서 하위 클래스에 의해 상속 된 공용 또는 보호 중첩 클래스는 슈퍼 클래스의 모든 개인 멤버에 간접적으로 액세스 할 수 있습니다.

캐스팅 객체

우리는 개체가 인스턴스화 된 클래스의 데이터 유형입니다. 예를 들어

public MountainBike myBike = new MountainBike();

다음 myBike는 MountainBike.

MountainBike는 Bicycle 및 Object. 따라서 MountainBike는 Bicycle이고 또한 Object이며 Bicycle 또는 Object 개체가 호출 될 때마다 사용됩니다.

반대가 반드시 사실은 아닙니다. Bicycle는 MountainBike 일 수 있지만 반드시 그런 것은 아닙니다. 마찬가지로 Object는 Bicycle 또는 MountainBike이지만 반드시 그런 것은 아닙니다.

전송은 하나의 개체를 사용하는 것을 보여줍니다. 상속 및 구현에서 허용되는 개체 중에서 다른 유형 대신 유형을 입력합니다. 예를 들어

Object obj = new MountainBike();

그러면 obj는 둘 다 Object 및 MountainBike (obj와 같은 시간에 MountainBike). 이를 암시 적 캐스팅이라고합니다.

반면에

MountainBike myBike = obj;

obj가 컴파일러에서 MountainBike로 알려지지 않았기 때문에 컴파일 타임 오류가 발생합니다. 그러나 명시 적 캐스팅을 통해 MountainBike를 obj에 할당하겠다고 컴파일러에 알릴 수 있습니다.

MountainBike myBike = (MountainBike)obj;

이 캐스트는 obj에 MountainBikeobj가 MountainBike라고 안전하게 가정 할 수 있도록합니다. 런타임시 obj가 MountainBike가 아니면 예외가 발생합니다.

참고 : instanceof 연산자를 사용하여 특정 개체의 유형에 대한 논리적 테스트. 이것은 부적절한 캐스트로 인한 런타임 오류로부터 당신을 구할 수 있습니다. 예 :

if (obj instanceof MountainBike) { MountainBike myBike = (MountainBike)obj;}

여기에서 instanceof 연산자가 obj는 MountainBike를 참조하므로 런타임 예외가 발생하지 않는다는 사실을 알고 캐스트를 만들 수 있습니다.

Articles
Previous Post

가구를 흰색으로 칠할 때해야 할 5 가지

Next Post

두통 및 눈의 통증 : 원인 및 치료

답글 남기기 답글 취소하기

최신 글

  • 2020 년 세계 최고의 사진 학교
  • 주권 시민이 반정부 철학을 도로로 가져옴
  • 치장 벽토 수리 비용 가이드
  • Muckrakers (한국어)
  • 정밀 종양학

보관함

  • 2021년 2월
  • 2021년 1월
  • 2020년 12월
  • 2020년 11월
  • 2020년 10월
  • 2020년 9월
  • Deutsch
  • Nederlands
  • Svenska
  • Norsk
  • Dansk
  • Español
  • Français
  • Português
  • Italiano
  • Română
  • Polski
  • Čeština
  • Magyar
  • Suomi
  • 日本語
  • 한국어
Proudly powered by WordPress | Theme: Fmi by Forrss.