2013-10-31 3 views
-4

Java 프로그래밍의 새로운 기능이지만 기본적인 이해가 필요합니다. 여기에 내 질문은, 나는 기본 클래스를 가지고 많은 클래스는이 기본 클래스를 확장합니다. 어떤 경우에는 기본 클래스 메서드에 의해 수행 된 표준 작업 후에 일부 하위 클래스에 대해서만 작업을 수행해야합니다. 그래서 나는 다음과 같이 끝냈습니다. 그냥 OOPS 당 올바른지 확인하고 싶습니다Java 기본 클래스 및 하위 클래스 메서드가 재정의합니다.

class BaseClass { 

    public void deleteThisRecord() { 
     // All standard code goes here 
     doSomethingAfterDelete(); // call clean up method after sucessful delete 
    } 

    public void doSomethingAfterDelete() { 
     // Nothing is here, let the sub class override this if there is need 
    } 
} 

class OneClass extends BaseClass { 
    // other methods 

    @Override 
    public void doSomethingAfterDelete() { 
     // do some action after delete 
    } 
} 
+0

이 경우 작동합니다 기본 클래스는 기본 구현을 가지며 일부 하위 클래스를 변경하려고합니다. 하위 클래스가 그것을 가지고 있기를 원한다면 추상 클래스를 사용하는 것에 대해 생각하고 싶을 수도있다. – dbarnes

+5

이 질문은 http://codereview.stackexchange.com/에 대한 주제에 관한 것이지만 내 의견을 말하기에는 불법이 아니다. 이것에 대해. 나는 추상적 인 방법보다 약간 더 융통성이 있기 때문에 때때로 그것을한다. 때로는 하위 클래스 중 일부에서만 무언가를 수행하기를 원합니다. – Radiodef

+0

서브 클래스는'doSomethingAfterDelete()'를 호출하지 않고 다시 구현하지 않도록'deleteThisRecord()'** final **을 작성해야합니다. – SJuan76

답변

1

예,이 방법은 파생 클래스가 doSomethingAfterDelete()을 구현하도록 선택할 수 있다는 점에서 사용자가 설명하는 방식으로 작동합니다. 그러나, 자바, 기본 클래스의 모든 메소드는 파생 클래스에서 기본적으로 대체 할 수 있습니다, 그래서 당신은 그것을 오버라이드 (override)되지 않도록하기 위해 방법 deleteThisRecord()final 수정을 추가 할 수 있습니다

public final void deleteThisRecord() { 
    // All standard code goes here 
    doSomethingAfterDelete(); // call clean up method after successful delete 
} 
1

추상 메서드는 하위 클래스에서만 호출 할 수있는 자리 표시 자 메서드입니다.

public abstract void doSomethingAfterDelete(); 

후, 서브 클래스에서 재정의 : 나는 doSomethingAfterDelete()를 오버라이드 (override) 할 목적으로 빈 자리 표시 방법의 경우, 당신이로 작성해야하는 것이 좋습니다.

+0

기본 클래스도 추상으로 선언해야합니다. –