>Java >java지도 시간 >Java 기초 소개 에세이(11) JavaSE Edition - 상속, 재정의, 추상 클래스

Java 기초 소개 에세이(11) JavaSE Edition - 상속, 재정의, 추상 클래스

黄舟
黄舟원래의
2016-12-22 13:21:071343검색

1. 객체지향 특징 2: 상속

정의:

은 한 객체가 다른 객체의 속성과 메서드를 직접 사용한다는 의미입니다.

상속의 이점:

1. 코드 재사용성을 제공합니다.

2. 클래스가 서로 직접적인 관계를 갖도록 하여 세 번째 특성 다형성의 전제 조건을 제공합니다.

Java에서는 단일 상속이 지원됩니다. 다중 상속을 직접 지원하지는 않지만 C++의 다중 상속 메커니즘을 개선합니다.

단일 상속: 하위 클래스는 상위 클래스를 하나만 가질 수 있습니다.

다중 상속: 하위 클래스는 여러 개의 직접 부모 클래스를 가질 수 있습니다(Java에서는 허용되지 않으며 개선이 이루어졌으며 여러 부모 클래스에 동일한 멤버가 있어 호출 불확실성이 발생하기 때문에 직접 지원되지 않습니다. java에서는 "다중 구현" 방식을 통해 반영됩니다.

Java는 다계층(다중) 상속을 지원합니다(예를 들어 C가 B를 상속하고 B가 A를 상속하는 경우 상속 시스템이 나타납니다.)

(약간 말도 안되는 소리: 상속 시스템을 사용하려면 1 클래스의 최상위 클래스를 살펴보고 시스템의 기본 기능을 이해합니다. 2 시스템에서 가장 하위 클래스 개체를 만들어 기능 사용을 완료합니다. .)

상속은 언제 정의되나요?

클래스 간 소유권 관계가 있는 경우 상속으로 정의합니다(xxx는 yyy 유형, xxx는 yyy 확장). )

이 클래스의 멤버가 지역 변수와 이름이 같은 경우 이를 사용하여 구분합니다.
자식 상위 클래스의 멤버 변수가 같은 이름을 갖는 경우 super를 사용합니다.

this: 이 클래스의 객체에 대한 참조를 나타냅니다.

super: 부모 클래스 공간을 나타냅니다.


2. override(override)

개념: 자식 클래스와 부모 클래스의 멤버 함수가 완전히 동일할 때 하위 클래스의 함수가 실행되는 현상을 Override 연산이라고 합니다.
1. Overload

2. Override.Override는 Override

Java 기초 소개 에세이(11) JavaSE Edition - 상속, 재정의, 추상 클래스 재정의에 대한 참고 사항:

1. 하위 클래스 권한은 상위 클래스 권한보다 크거나 같아야 합니다. 메서드가 비공개인 경우 이를 재정의라고 하지 않습니다.

2. 정적은 정적만 재정의할 수 있으며

override 연산은 언제 사용하나요?

클래스를 서브클래싱할 때, 서브클래스는 상위 클래스의 함수 선언을 유지해야 하지만, 서브클래스에서 함수의 고유한 내용을 정의하려는 경우 , 재정의 작업을 사용하여 완료합니다.



하위 부모 클래스

의 생성자의 특징 하위 클래스 생성자에 액세스할 때 상위 클래스도 실행됩니다.

이유는 하위 클래스에 생성자의 첫 번째 줄에 기본 암시적 명령문이 있습니다: super();

하위 클래스: 하위 클래스의 모든 생성자는 기본적으로 상위 클래스의 빈 매개변수 생성자에 액세스합니다.

왜 하위 클래스가 인스턴스화될 때 상위 클래스의 생성자에 액세스해야 합니까? 하위 클래스는 상위 클래스를 상속하고 상위 클래스의 내용(속성)을 얻기 때문에 를 사용할 때는 상위 클래스의 내용에 액세스하기 전에 먼저 상위 클래스가 자신의 콘텐츠를 어떻게 초기화하는지 확인해야 합니다. 따라서 객체를 생성할 때. , 하위 클래스는 상위 클래스의 생성자에 액세스해야 합니다. 이 필수 작업을 완료하기 위해 super() 문이 하위 클래스의 생성자에 추가됩니다.

상위 클래스에 빈 매개변수 생성자가 정의되어 있지 않은 경우 하위 클래스의 생성자는 super를 사용하여 상위 클래스에서 호출할 생성자를 지정해야 합니다. 동시에 이것이 하위 클래스 생성자에서 이 클래스의 생성자를 호출하는 데 사용되면 super는 사라지게 됩니다. 왜냐하면 super와 this는 모두 첫 번째 줄만 정의할 수 있기 때문입니다. 따라서 하나만 있을 수 있습니다. 그러나 보장되는 것은 하위 클래스에 상위 클래스의 생성자에 액세스하는 다른 생성자가 분명히 있다는 것입니다.

참고: super 문은 하위 클래스 생성자의 첫 번째 줄에 정의되어야 합니다. 상위 클래스의 초기화 작업이 먼저 완료되어야 하기 때문입니다.

객체 인스턴스화 프로세스:


예를 들어 Person p = new Person();
1이면 JVM은 지정된 경로에서 Person.class 파일을 읽고 메모리에 로드하면 Person의 상위 클래스가 먼저 로드됩니다(직접 상위 클래스가 있는 경우).
2. 힙 메모리에 공간을 만들고 주소를 할당합니다.
3, 그리고 객체 공간에서는 기본적으로 객체의 속성을 초기화합니다.
4. 초기화를 위해 해당 생성자를 호출합니다.
5. 생성자에서 첫 번째 줄은 초기화를 위해 상위 클래스의 생성자를 먼저 호출합니다.
6. 상위 클래스가 초기화된 후 하위 클래스의 속성이 표시되고 초기화됩니다.
7, 그런 다음 하위 클래스 생성자의 특정 초기화를 수행합니다.
8. 초기화 후 참조 변수에 주소 값을 할당합니다.

그림 분할(단계는 다음과 같습니다):

Java 기초 소개 에세이(11) JavaSE Edition - 상속, 재정의, 추상 클래스

3. final 키워드

1.final은 클래스, 메소드, 변수를 수정할 수 있는 수식어입니다.

2. 최종 수정된 클래스는 상속할 수 없습니다.

3.최종 수정된 메서드는 재정의될 수 없습니다. (여기서 static과의 차이점에 유의하세요. 하위 클래스가 static이면 여전히 재정의될 수 있습니다.)

4. final로 수정되는 변수는 상수이며 한 번만 할당할 수 있습니다.

변수를 수정하기 위해 왜 final을 사용해야 하나요? 실제로 데이터 조각이 프로그램에 고정되어 있으면 데이터를 직접 사용하면 충분하지만 읽을 수 없으므로 데이터에 이름이 부여됩니다. 게다가 이 변수명의 값은 변경할 수 없으므로 final을 추가하면 고정된다.

표준 쓰기: 상수의 모든 문자는 대문자, 여러 단어로 이루어져야 하며 중간에 _로 연결되어야 합니다.

상속의 단점:

상속 중단 캡슐화의 단점(해결책은 최종 선언에 final 수정자를 사용하는 것일 수 있음)

4. Abstraction Class

Abstract: 모호한, 일반적인, 이해하기 어려운, 구체적이지 않은.

특징:

1. 메소드가 선언만 되고 구현되지 않은 경우 해당 메소드는 추상 메소드이므로 추상으로 수정해야 합니다. 추상 메서드는 추상 클래스에 정의되어야 하며, 클래스도 추상에 의해 수정되어야 합니다.

2. 추상 클래스는 인스턴스화할 수 없습니다. (이유: 추상 메서드를 호출하는 것은 의미가 없기 때문입니다.)

3. 추상 클래스는 하위 클래스가 인스턴스화되기 전에 해당 하위 클래스에 포함되는 모든 추상 메서드를 가져야 합니다. 그렇지 않으면 이 하위 클래스는 여전히 추상 클래스입니다.

질문 이해:

1. 추상 클래스에 생성자가 있나요? 일부는 하위 클래스 개체를 초기화하는 데 사용됩니다.

2. 추상 클래스는 추상 메소드를 정의할 수 없나요? 가능하지만 드물게 이 클래스가 객체를 생성하는 것을 방지하는 것이 목적입니다. AWT의 어댑터 객체는 이 클래스입니다. 일반적으로 이 클래스의 메서드에는 메서드 본문이 있지만 내용은 없습니다. eq: void show(){}이 유형에는 메소드 본문이 없습니다

3. 추상 키워드와 공존할 수 없는 키워드는 무엇입니까?

private은 작동하지 않습니다. 왜냐하면 private은 상위 클래스에만 알려져 있고 추상화는 재정의되어야 하지만 하위 클래스는 이를 재정의할 수 없으므로 private과 공존할 수 없기 때문입니다.

static 아니요, 멤버가 static이면 클래스 이름으로 직접 호출할 수 있지만 메소드는 추상화에서 구체적인 메소드 본문이 아니므로 공존할 수 없습니다.

최종 1위 최종 세트 멤버와 클래스는 재정의되거나 상속될 수 없기 때문에 공존할 수 없습니다.

4. 추상수업과 일반수업의 공통점과 차이점은 무엇인가요?

유사점: 추상 클래스와 일반 클래스는 모두 사물을 설명하는 데 사용되며 둘 다 내부 멤버를 갖습니다.

차이점: 1. 일반 클래스에는 사물을 설명하는 데 충분한 정보가 있는 반면, 추상 클래스에는 사물을 설명하는 데 충분한 정보가 없을 수 있습니다.

2. 일반 클래스에서는 추상 메서드를 정의할 수 없으며, 추상 클래스에서는 추상 메서드만 정의할 수 있으며, 비추상 메서드도 정의할 수 있습니다.

3. 일반 클래스는 인스턴스화할 수 있지만 추상 클래스는 인스턴스화할 수 없습니다.

5. 추상 클래스는 부모 클래스여야 하나요? 예, 하위 클래스가 인스턴스화되기 전에 하위 클래스가 해당 메서드를 재정의해야 하기 때문입니다.

위 내용은 Java(11) JavaSE 버전 - 상속, 재정의, 추상 클래스 내용에 대한 기본 입문 에세이입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.