(학습 참고서 : Java2 실습 튜토리얼 제 5 판)
하나, 하위 클래스 및 상위 클래스
상속은 기존 클래스에서 새 클래스를 만드는 메커니즘입니다. 상속을 사용하면 먼저 공통 속성이있는 일반 클래스를 정의 할 수 있습니다. 일반 클래스에 따라 특수 속성이있는 하위 클래스를 정의합니다. 하위 클래스는 일반 클래스의 속성과 동작을 상속하고 필요에 따라 고유 한 새 속성과 동작을 추가합니다. 상속 된 클래스를 자식 클래스라고하고 상속 된 클래스를 부모 클래스 (슈퍼 클래스)라고합니다. Java는 다중 상속을 지원하지 않습니다. 즉, 하위 클래스는 하나의 상위 클래스 만 가질 수 있습니다.
둘째, 하위 범주의 정의
키워드 extends를 사용하여 클래스의 서브 클래스를 정의하십시오. 형식은 다음과 같습니다.
class 子类名 extends 父类名{
...;
}
세, 클래스 트리 구조
Java의 모든 클래스의 조상은 Object 클래스 입니다. 각 클래스 (Object 클래스 제외)에는 하나의 상위 클래스 만 있지만 0 개 이상의 하위 클래스가있을 수 있습니다. 클래스 선언에 extends 키워드가 없으면 해당 클래스는 시스템에서 Object 클래스의 하위 클래스로 간주됩니다. 즉, "class A"와 "class A extends Object"선언은 동일합니다.
넷째, 하위 클래스의 상속
(1) 하위 클래스와 상위 클래스가 동일한 패키지에 있으면 하위 클래스는 자연스럽게 상위 클래스에서 private이 아닌 변수와 메서드를 상속하고 상속 된 멤버 변수 및 메서드의 액세스 권한은 변경되지 않습니다.
(2) 하위 클래스와 상위 클래스가 동일한 패키지에 없으면 하위 클래스는 개인 및 친숙한 멤버 변수 및 메서드를 상속하지 않고 공유 및 보호 멤버 변수 및 메서드 만 상속합니다.
다섯, 하위 클래스의 대상
서브 클래스의 생성 방법을 사용하여 객체를 생성 할 때, 서브 클래스에서 선언 된 멤버 변수는 메모리 공간이 할당 될뿐만 아니라 상위 클래스의 서브 클래스가 상속 한 멤버 변수도 메모리 공간이 할당됩니다.
Six, instanceof 연산자
이항 연산자의 경우 객체는 왼쪽에 있고 클래스는 오른쪽에 있습니다. 왼쪽의 객체가 오른쪽의 클래스 또는 하위 클래스에 의해 생성 된 객체 인 경우 반환 값은 true이고 그렇지 않으면 false입니다.
일곱, 멤버 변수 숨김 및 메서드 재 작성
(1) 멤버 변수 숨기기
서브 클래스에서 선언 된 멤버 변수가 부모 클래스에서 상속 된 멤버 변수와 동일한 이름을 가질 경우 서브 클래스는 상속 된 멤버 변수를 숨 깁니다. 서브 클래스에 상속 된 멤버 변수의 특성은 다음과 같습니다.
- 하위 클래스 자체에 의해 정의 된 하위 클래스 개체 및 메서드는 상위 클래스와 동일한 이름을 가진 멤버 변수에서 작동하며 하위 클래스에서 다시 선언 한 멤버 변수를 참조합니다.
- 하위 클래스 개체는 상위 클래스에서 상속 된 메서드를 호출하여 하위 클래스에 의해 숨겨진 멤버 변수를 작동 할 수 있습니다. 즉, 하위 클래스에 의해 상속 된 메서드에 의해 작동되는 멤버 변수는 하위 클래스에 의해 상속되거나 숨겨진 멤버 변수 여야합니다.
- 새로 정의 된 하위 클래스 메서드는 하위 클래스의 숨겨진 멤버 변수를 조작 할 수 없습니다 (super 키워드를 사용해야 함).
(2) 메서드 재 작성
- 문법 규칙 : 하위 클래스가 상위 클래스의 특정 메서드를 상속 할 수있는 경우 하위 클래스는이 메서드를 재정의 할 권한이 있습니다. 소위 메소드 재 작성은 하위 클래스의 메소드 정의를 의미합니다.이 메소드의 유형은 상위 클래스의 메소드 유형 또는 상위 클래스의 메소드 하위 유형 및 이름과 일치 합니다. 메소드, 매개 변수 수 및 매개 변수 유형 메소드는 상위 클래스와 정확히 동일합니다.
- 재 작성 목적 : 서브 클래스는 메소드 재 작성을 통해 상속 된 메소드를 숨길 수 있으며, 서브 클래스는 메소드 재 작성을 통해 부모 클래스의 상태와 동작을 자신의 상태와 동작으로 변경할 수 있습니다. 재정의 된 메서드는 상속 된 멤버 변수 및 메서드뿐만 아니라 새로 선언 된 멤버 변수 및 하위 클래스에서 정의한 새 메서드도 작동 할 수 있습니다. 그러나 하위 클래스에 의해 숨겨진 멤버 변수 및 메서드는 조작 할 수 없습니다.
- 재정의에 대한 참고 사항 : 상위 클래스의 메서드를 재정의 할 때 메서드의 액세스 권한을 줄이는 것은 허용되지 않지만 액세스 권한은 증가 할 수 있습니다. (권한 순서 : 공개> 보호> 친절> 비공개
여덟, 슈퍼 키워드
(1) super 키워드의 역할 및 사용 :
하위 클래스가 상속 된 멤버 변수 또는 메서드를 숨기면 하위 클래스가 생성 한 개체는 더 이상 변수 또는 메서드를 소유하지 않으며 변수는 super 키워드가 소유합니다. 다음과 같이 :
super.x//操作被隐藏的成员变量x
super.play()//调用被隐藏的方法
(2) 상위 클래스의 생성 방법을 호출하기 위해 super 키워드를 사용하며
, 서브 클래스의 생성 방법이 서브 클래스의 객체를 생성 할 때, 서브 클래스의 생성 방법은 항상 상위 클래스의 특정 생성 방법을 먼저 호출합니다. 사용할 부모 클래스의 생성자를 명확하게 나타내지 않으면 매개 변수없이 부모 클래스를 호출합니다.
서브 클래스는 부모 클래스의 생성 방법을 상속받을 수 없기 때문에, 서브 클래스의 생성 메소드를 작성할 때 부모 클래스의 생성 방법을 호출하기 위해 super 키워드를 사용해야하며, super는 생성 방법의 첫 문장이어야한다. 하위 클래스의. super 문을 작성하지 않으면 기본값은 다음과 같습니다. super ();
Java의 매개 변수없는 생성자로 인해 상위 클래스에 여러 생성자가 정의 된 경우 하위 클래스가 super를 생략 할 때 오류를 방지하기 위해 매개 변수가없는 생성자를 포함해야합니다.
class 父类{
父类(构造方法){
...;
}
...;
}
class 子类 extends 父类{
子类(构造参数){
super(构造参数); //父类的构造方法
...; //构造方法
}
}
9 개의 최종 키워드
final 키워드는 클래스, 멤버 변수 및 메서드에서 지역 변수를 수정할 수 있습니다.
(1) Final 클래스 final 클래스
는 final 로 선언 할 수 있으며 final은 상속 할 수 없습니다. 다음과 같이 :
final class A{
...;
}
(2) Final 메서드
부모 클래스의 메서드가 final로 수정되면이 메서드는 서브 클래스에서 다시 작성할 수 없습니다. (정직하게 상속, 조작은 허용되지 않습니다)
(3) 최종 상수
final로 수정 된 멤버 변수와 지역 변수는 상수이며, 선언시 특정 값을 제공해야합니다.
10. 객체의 상향 변환
부모 클래스 개체 및 하위 클래스 개체를 정의하십시오. 상위 클래스 개체에 하위 클래스 개체의 참조를 넣으면 상위 클래스 개체를 하위 클래스 개체의 상위 변환 개체 라고 합니다 . 다음과 같은 특징이 있습니다.
- 상위 변환 객체는 하위 클래스의 새 멤버 변수를 조작 할 수 없으며 (속성의이 부분 손실) 하위 클래스의 새 메서드를 호출 할 수 없습니다 (일부 동작 손실).
- 상위 변환 개체는 하위 클래스에 의해 상속되거나 숨겨진 멤버 변수 및 메서드에 액세스합니다. 하위 클래스가 상위 클래스의 인스턴스 메서드를 다시 작성하는 경우 상위 변환 개체가이 메서드를 호출 할 때 하위 클래스의 다시 작성된 인스턴스 메서드를 호출해야합니다.
- 하위 클래스가 상위 클래스의 클래스 메서드를 재정의하는 경우 하위 클래스 개체의 상위 캐스트 개체는 하위 클래스가 다시 작성한 클래스 메서드를 호출 할 수 없습니다. 부모 클래스의 메서드 만 호출합니다.
- 부모 클래스가 만든 개체! = 하위 클래스 개체의 업 캐스트 개체
Eleven, 추상 클래스 및 추상 메서드
abstract 키워드로 수정 된 클래스와 메서드를 추상 클래스와 추상 메서드라고합니다. 추상 메서드의 경우 선언 만 가능하지만 구현할 수 없으며 (즉, 메서드 본문이 없음 ) final 및 abstract를 사용하여 동일한 메서드 또는 클래스를 수정할 수 없습니다. 또한 static을 사용하여 추상 메서드를 수정하는 것도 허용되지 않습니다. 즉, 추상 메서드는 인스턴스 메서드 여야합니다.
- 추상 클래스에는 추상 메서드가 있거나 추상 메서드가 없을 수 있습니다. 그러나 비추 상 클래스는 추상 메서드를 가질 수 없습니다.
- 추상 클래스는 new 연산자로 개체를 만들 수 없습니다. 비추 상 클래스가 추상 클래스의 하위 클래스 인 경우 부모 클래스의 추상 메서드를 재정의하고 메서드 본문을 제공해야합니다. 추상 클래스가 다른 추상 클래스의 하위 클래스 인 경우 부모 클래스의 추상 메서드를 재정의하거나 부모 클래스의 추상 메서드를 상속 할 수 있습니다.
- 추상 클래스를 사용하여 객체를 선언 할 수 있습니다. new 연산자를 사용하여 객체를 만들 수는 없지만 객체를 하위 클래스의 업 캐스트 객체로 만들어 객체가 하위 클래스 재정의 메서드를 호출 할 수 있도록 할 수 있습니다.