공식 조치
Java 언어가 제공하는 키워드 "최종"을 사용 하여이 작업을 수행 할 수 있습니다. 다음 소스 코드 예를 살펴보십시오.
코드 사본은 다음과 같습니다.
// FinalDemo.java
공개 최종 클래스 FinalDemo {
}
아래에 다른 수업을 만들어 위에서 선언 한 클래스를 물려받을 것입니다. Java 언어가 제공하는 "확장"키워드를 사용하면 클래스가 기존 클래스에서 상속 될 수 있습니다.
코드 사본은 다음과 같습니다.
// FinalDemo2.java
공개 클래스 FinalDemo2 확장 FinalDemo {
}
첫 번째 클래스를 컴파일 한 후, 두 번째 클래스를 컴파일하면 JDK 컴파일러가 오류를보고하고 다음 오류 메시지가 표시됩니다.
FinalDemo2.java:1 : FinalDemo에서 상속받을 수 없습니다
공개 클래스 FinalDemo2 확장 FinalDemo {}
^
1 오류
이제 공식적인 방법을 통해 첫 번째 수업이 다른 클래스에 의해 상속되는 것을 성공적으로 방지했습니다.
비공식적 조치
그러나 다른 클래스에 의해 수업이 상속되는 것을 방지하는 방법은 독특하지 않습니다. 다음 코드를 고려할 때 생성자가 비공개임을 선언하고 클래스 객체를 반환하는 정적 메소드를 선언합니다.
코드 사본은 다음과 같습니다.
공개 수업 privateTest {
Private PrivateTest () {
System.out.println ( "개인 기본 생성자");
}
공개 정적 privateTest getInstance () {
새로운 privateTest ()를 반환합니다.
}
}
위에서 수정 된 코드는 "Singleton Pattern"이라고하며 GetInstance 메소드는 항상이 클래스의 인스턴스 만 리턴합니다. 그러나이 코드가 왜 클래스가 상속되는 것을 막는가? 다음 코드를 고려하십시오. 선언 된 클래스는 위의 클래스를 상속해야합니다.
Public Class PrivateTest2는 privateTest를 확장합니다.
}
첫 번째 클래스를 컴파일 한 후, 두 번째 클래스를 컴파일하면 JDK 컴파일러가 오류를보고하고 다음 오류 메시지가 표시됩니다.
privateTest2.java:1 : privateTest ()는 privateTest에서 개인 액세스 권한이 있습니다
Public Class PrivateTest2는 privateTest를 확장합니다.
^
1 오류
두 번째 클래스는 첫 번째 수업을 상속받을 수 없습니다. 그러나 오류는 무엇을 의미합니까? Java 언어는 클래스에서 하나 이상의 구성 요소 방법을 제공해야합니다. 아티팩트 방법을 제공하지 않으면 JDK는 선언 한 클래스에 기본 아티팩트 메소드를 삽입합니다. 다시 말해, 기본값은 매개 변수, 빈 구성 요소 본문 및 공개 액세스 권한이없는 구성 요소 메소드입니다. 그러나 구성 요소 메소드를 직접 정의하면 JDK 컴파일러는 이러한 기본 구성 요소 메소드를 삽입하지 않습니다. 방금 PrivateTest 클래스에서 기본 구성 요소 방법을 선언했지만 기본 공개 액세스 권한을 JDK 컴파일러 구문 확인의 규칙과 일치하는 개인 권한으로 변경했습니다.
이제 두 번째 부서를 살펴 보겠습니다. Java 언어는 또한 구성 요소 메소드의 첫 번째 줄에서 슈퍼 클래스의 구성 요소 메소드를 호출해야합니다. 상속 기능을 시작하는 데 필요합니다. Java에서는 수퍼 클래스의 구성 요소 메소드에 매핑되는 Super () 메소드를 호출 하여이 작업을 완료합니다. 슈퍼 클래스의 기본 생성자를 제공하지 않으면 JDK 컴파일러는 호출 할 기본 수퍼 클래스 구성 요소 메소드를 삽입합니다.
우리는 방금 제작자를 일등석에서 개인 허가로 선언했습니다. 이제 다른 클래스 에서이 클래스를 상속하면 컴파일러는 기본 슈퍼 클래스 구성 요소 메소드를 호출하려고합니다. 슈퍼 클래스 범위 내의 구성 요소 메소드는 개인 권한으로 선언되므로 컴파일러는 슈퍼 클래스 구성 요소 메소드를 호출 할 수 없다는 오류를보고합니다. 따라서 비공식적 인 방법을 통해 한 클래스가 다른 클래스에 의해 상속되는 것을 방지합니다.
USMAN SALEEM
모하마드 알리 진나 대학교
이메일 : [email protected]