2012-06-22 4 views
2

나는 Java을 배우고 있으며 abstract classes and interfaces은 인스턴스화 할 수 없다는 것을 알고 있습니다. 그러나 java.lang.System의 문서는 추상적이면서 인터페이스가 아닌 instantiated이 될 수 없다고 말합니다.
Java의 시스템 클래스

나는 그것에 대해 설명하지 못했습니다. 누군가 설명해 주시겠습니까?

누군가 이러한 클래스를 만들 수 있습니까?

답변

8

간단합니다. public 생성자가 없습니다.

final public class Abc { 
    private Abc() {} 
} 
2

클래스를 인스턴스화하려면 보이는 생성자가 필요합니다. 하지만 java.lang.System은이를 제공하지 않습니다.

2

간편함 : 클래스를 final으로 만들면 확장 할 수 없으므로 private 생성자가 있으므로 new System()이 작동하지 않습니다.

이것이 바로 System의 작동 방식입니다.

0

당신은 juste 개인 생성자 클래스를 생성하고 최종 그래서 다른 클래스를 확장 할 수 있도록, public 생성자가없는 클래스를 인스턴스화 할 수 없습니다

당신은 자신이 그렇게 할 수 있습니다 그것은 : 당신은 어느 쪽인가 당신을위한 클래스의 객체 (싱글 톤 패턴을 CF), 또는 정적 멤버를 인스턴스화하는 공공 정적 멤버가 필요합니다

public final class MyClass { 
    private MyClass() { 
    } 
} 

참고.

3

java.lang.System은 Java의 "정적"클래스로, 정적 메서드 만있는 클래스이며 사용되기 전에 인스턴스를 만들거나 허용하지 않습니다.

java는 클래스 정의 (예 : C#)에 키워드 "정적"을 허용하지 않으므로 이러한 정적 클래스를 얻는 가장 좋은 방법은 생성자를 private으로 만드는 것입니다. 예를 들면 다음과 같습니다.

public final class System { 
    private System() { throw new UnsupportedOperationException(); } 

    public static void method1() { ... } 

    ...other public static methods 
} 

이것은 바보 같은 증거는 아닙니다. 컴파일러에 의해 검사되지만 프로그래머가하지 말아야 할 것으로 예상되는 자체 메서드 중 하나에서만 생성되도록 클래스를 제한합니다 (잊지 않으면 예외로 상기시킵니다).