2012-07-20 2 views
-5

최종 키워드를 사용하지 않고 클래스에 상속을 피하는 방법은 무엇입니까?

class a 
{ 
---- 
} 
class b extends a 
{ 

} 
하지만 내 클래스는

+0

어떤 행동을 기대하며 무엇을보고 있습니까? – bdares

+5

왜 'final' 키워드를 사용하지 않으시겠습니까? 이것이 바로 '최종'키워드가 무엇인지 나타내는 것입니다. – David

+0

@David 예, 'static' 키워드를 사용하지 않고 필드를 정적으로 만드는 방법을 묻는 것과 조금 다릅니다. 그게 가능하지만 왜? – biziclop

답변

9

정확하게 귀하의 질문에 어떤 방법 B로 상속하지 않는? 클래스 a이 서브 클래 싱되지 않도록하려면 어떻게해야합니까? 클래스를 만들지 않고 afinal?

모든 생성자를 클래스 a으로 설정하십시오. private. a 인스턴스를 생성하기위한 팩토리 메서드를 제공합니다. 클래스 생성자에서 다음

class a { 
    // Private constructor 
    private a() { 
    } 

    // Factory method 
    public static a createA() { 
     return new a(); 
    } 
} 
+0

와우 .. 나는 오늘 새로운 무언가를 배웠다 :-) –

2

사용 :

if (this.getClass() != A.class) { 
    throw new RuntimeException("Subclassing not allowed"); 
} 

그러나이 방법을 사용하면 런타임에 상속을 제한합니다.

+1

이것은 100 % 안전한 방법은 아니지만 유의하십시오. 누군가 ** 정말로 ** A의 하위 클래스를 인스턴스화하려는 경우 가능할 것입니다. – biziclop

관련 문제