JAVA에서 클래스 상속 차단(공식 및 비공식)

2592 단어 계승
공식적인 방법
JAVA 언어에서 제공하는 키워드 "FINAL"을 사용하여 작업을 수행할 수 있습니다.다음 소스 코드 범례를 살펴보십시오.

//FinalDemo.java
public final class FinalDemo {
}
다음은 위에서 설명한 클래스를 계승할 또 다른 클래스를 만듭니다.JAVA 언어에서 제공하는 "EXTENDS"키워드는 하나의 클래스를 기존의 클래스로 계승할 수 있습니다.

//FinalDemo2.java
public class FinalDemo2 extends FinalDemo {
}  
첫 번째 클래스를 컴파일한 후에 두 번째 클래스를 컴파일하면 JDK 컴파일러가 오류를 보고하면 다음 오류 정보를 얻을 수 있습니다.
FinalDemo2.java:1: cannot inherit from final FinalDemo public class FinalDemo2 extends FinalDemo{}                                 ^ 1 error
현재, 당신은 이미 공식적인 방법을 통해 첫 번째 클래스가 다른 클래스에 의해 계승되는 것을 막는 데 성공했다.
비공식적 방법
그러나 클래스가 다른 클래스에 계승되는 것을 막는 방법도 유일한 것은 아니다.다음 코드를 고려하여 구조 방법이 개인 (private) 임을 설명했고, 정적 방법 (static method) 을 설명하여 클래스 대상을 되돌려 주었다.

public class PrivateTest{
        private PrivateTest(){
                System.out.println("Private Default Constructor");
        }
        public static PrivateTest getInstance(){
                return new PrivateTest();
        }
}
위에서 수정된 코드는 "Singleton 모드"라고 불리며, get Instance 방법은 항상 이 종류의 실례만 되돌려줍니다.그런데 왜 이 코드가 클래스의 계승을 막았을까?아래의 코드를 고려하면 성명된 클래스는 위의 클래스를 계승할 수 있을 것이다.
public class PrivateTest2 extends PrivateTest{
}
첫 번째 클래스를 컴파일한 후에 두 번째 클래스를 컴파일하면 JDK 컴파일러가 오류를 보고하면 다음 오류 정보를 얻을 수 있습니다.
PrivateTest2.java:1: PrivateTest() has private access in PrivateTest public class PrivateTest2 extends PrivateTest{        ^ 1 error
두 번째 클래스는 첫 번째 클래스를 계승할 수 없습니다.그런데 힌트가 틀렸다는 뜻은 뭘까요?JAVA 언어는 하나의 클래스에서 최소한 하나의 구성 요소 방법을 제공해야 한다.만약 위젯 방법을 제공하지 않았다면, JDK는 성명된 클래스에 기본 위젯 방법을 삽입할 것입니다.기본값은 매개 변수, 빈 구성 요소, 공공 (public) 접근 권한이 없는 구성 요소 방법입니다.그러나 만약 당신이 구성 요소 방법을 정의한다면, JDK 컴파일러는 이렇게 기본적인 구성 요소 방법을 삽입하지 않을 것이다.우리는 방금 Private Test 클래스에서 기본적인 구성 요소 방법을 설명했지만, 기본적인public 접근 권한을private 권한으로 바꾸었습니다. 이것은 모두 JDK 컴파일러 문법 검사의 규칙에 부합됩니다. 
이제 두 번째 부서를 봅시다.JAVA 언어도 구성 요소 방법의 첫 줄에서 (call) 슈퍼 클래스 (superclass) 구성 요소를 호출해야 한다고 요구합니다.이것은 상속 피쳐를 시작하는 데 필요한 것입니다.JAVA에서, 우리는 슈퍼 () 방법을 호출해서 이 임무를 완성합니다. 이것은 초클래스 구성 요소 방법에 비추게 됩니다.만약 초클래스에 기본적인 구조 방법을 제공하지 않았다면, JDK 컴파일러는 호출하기 위해 기본 초클래스 구성 요소를 삽입할 것입니다.
우리는 방금 첫 번째 클래스에서 구조기를private의 권한으로 성명했다.현재, 우리가 다른 클래스에서 이 클래스를 계승할 때, 컴파일러는 기본적인 초클래스 구성 요소를 호출하는 방법을 시도할 것이다.클래스 범위 내의 구성 요소 방법은private 권한으로 표시되기 때문에, 컴파일러는 클래스 구성 요소 방법을 호출할 수 없다고 오류를 보고합니다.그래서 우리는 비공식적인 방법을 통해 한 종류가 다른 종류에 의해 계승되는 것을 막았다.
Usman Saleem Mohammad Ali Jinnah University E-mail: [email protected]

좋은 웹페이지 즐겨찾기