2012-11-28 2 views
1

약간의 OOP 도움말이 필요합니다.상속에있는 빈 메서드를 재정의하십시오.

저는 기본 결제액이 SendPayment() UpdateRecord()이고 다른 결제 방식을 구현하는 하위 클래스가 있습니다. PayPal, SagePay.

모두 SendPayment() 방법을 사용하지만 모두 다르게 구현됩니다. 그래서 각 하위 클래스에서 내 자신의 구현을 적용하려면 기본 클래스를 재정의합니다. 기본 클래스는 구현이 비어있는 메소드 만 보유합니다. 이것은 빈 메소드를 가지고 각 자식 클래스에서 오버라이드 코드를 구현하거나 기본 클래스에서 빈 메소드를 제거하고 하위 클래스에서이 메소드를 사용하는 것이 좋은 OOP의 방법인가?

감사합니다 ...

죄송합니다. 빠른 편집. 예를 들어 계산을 위해 특정 시나리오에 기본 클래스를 사용합니다. 여기에는 비용으로 제품 수를 계산하고 테이블에서 레코드를 제거하는 것과 같은 모든 지불 유형이 포함됩니다.

+0

을하면 돈 기본 클래스를 인스턴스화 할 필요가 없으면 기본 클래스를 추상적으로 설정하고 빈 메서드에 대해서도 동일하게 설정합니다. 이것은 당신이 (전혀 코드가없는 경우) – Ondra

답변

3

기본 클래스를 abstract 클래스로 만들고 구현되지 않은 메서드를 abstract 메서드로 만들 것을 제안합니다.

public abstract class BasePayment { 

     //abstract method: unimplemented   
     public abstract void sendPayment(); 

     //implemented method  
     public void UpdateRecord(){ 
      ..... 
     } 

    } 

Abstract 클래스는 구현 및 구현되지 않은 방법의 혼합을 갖고 싶어 시나리오 이런 종류의위한 것입니다. 추가 된 장점은 다음과 같습니다. 모든 확장 클래스는 자체적으로 sendPayment 메소드를 구현해야합니다.

+0

추상적 인, 또는 인터페이스를 재정의하는 빈 방법과 힘을 정의 할 수 있습니다. 나는 OP가'sendPayment' 만 다르기를 원했기 때문에'추상적'클래스가 더 나은 선택이라고 생각합니다. –

+0

@SteveB 동의 갈 수있는 OOP의 방법은 당신이 파생 클래스에서 –

+0

도움 주셔서 감사합니다. 믹스하고 매치 할 때 추상화가 올바른 방법이라고 생각합니다. 당신은 맞습니다 스티브 B 나는 실수를했으며 지불 방법 만 다릅니다. 모든 메소드는 공유되지만 하위 클래스에는 하위 클래스에서 사용되지 않는 다른 구현이 있습니다. –

2

하위 클래스가 기본 메서드를 재정의하지 않고 의미가없는 경우 기본 메서드 abstract을 유지합니다.

그러나 기본 클래스는 추상 메소드를 포함하고 (제 생각 엔 당신의 사건이다) 어떤 국가가없는 경우

되는 인터페이스 휴가 구현의 권리는 다른 기본 클래스를

0

을 그것의 가지고 있기 때문에, 인터페이스를 사용하는 것이 좋습니다 승인. 그러나 기본 클래스를 어떻게 사용 하느냐에 달려 있습니다. 메소드 또는 클래스 abstract을 표시 할 수 있으며이 경우 모든 하위 클래스가 메소드를 구현해야합니다. virtual으로 표시하면 하위 클래스가 필요할 경우 해당 클래스를 무시하거나 비워 둘 수 있습니다.
기본 클래스에 메서드를 지정하지 않으면 추상화와 다형성을 모두 사용할 수 없습니다. 예를 들어, 당신은 지불 (List<Payment>을)의 목록 (지급의 실제의 형태가 무엇인지는 중요하지 않습니다)가 당신이 다음에 무엇을 할 수 없습니다 당신은 그들 모두를 보내려면 :

foreach(Payment payment in payments) 
{ 
    payment.SendPayment(); 
} 
관련 문제