2016-06-01 14 views
1

私は独学者の趣味のプログラマーです。私の知識はコンパイラが何をしているのか見ていないからです。オブジェクト指向理論では、派生クラスが親オブジェクトのインターフェイスを継承する必要がありますか?

は、私はこのようなルックスをオーバーライドする必要がクラス

(C#の表記で、Javaは他の能力を持っている場合があります)私が持っていると仮定します。

public interface ICanDoSomethingElse 
{ 
    void DoIt(); 
} 
class Parent : ICanDoSomethingElse 
{ 
    public void EatTacos() 
    { 
    } 

    void ICanDoSomethingElse.DoIt(string thingToDo) 
    { 
     // Implementation 
    } 
} 

だから私は、これを実行します。

class Child : Parent, ICanDoSomethingElse 
{ 
    new public void EatTacos() 
    { 
    } 
    void ICanDoSomethingElse.DoIt(string thingToDo) // NEW keyword illegal here? 
    { 
     // Implementation 
    } 
} 

質問

私は、彼新しいキーワードがインターフェイスで不正です。これは明示的なインターフェイスなので、ですか?

子供にインターフェイスを強制的に実装させる方法はありますか?つまり、暗黙的または明示的なキャストを設定する必要がありますか?

+0

このような言語の設計についての質問は、おそらくcs.stackexchange.comの方が適切でしょう。 – Barmar

+0

'Child'は' Parent'から継承するべきだと思います –

+0

このコードには親子関係も基本派生関係もありません。すべての年齢制限は意味をなさないです – Amit

答えて

3

私は新しいkeywor dはインタフェースでは不正です。これは明示的なインターフェイスなので、ですか?

エラーは、クラスで明示的にインターフェイスを実装しているためです。

明示的な実装では、インターフェイスを直接操作しているときにのみ、メソッドが公開されるよう強制されます。

あなたのクラスは、このようにしている場合:

class Parent : ICanDoSomethingElse 
{ 
    ... 

    public void DoIt(string thingToDo) 
    { 
     // Implementation 
    } 
} 

class Child : Parent, ICanDoSomethingElse 
{ 
    ... 

    public new void DoIt(string thingToDo) 
    { 
     // Implementation 
    } 
} 

あなたは何とかParent.DoIt実装を隠すためにnewキーワードを使用する必要があります。

子供にインターフェイスを強制的に実装させる方法はありますか?つまり、暗黙的または明示的なキャストを設定する必要がありますか?

ここ
abstract class Parent : ICanDoSomethingElse 
{ 
    ... 

    public abstract void DoIt(string thingToDo); 
} 

class Child : Parent, ICanDoSomethingElse 
{ 
    ... 

    public override void DoIt(string thingToDo) 
    { 
     // Implementation 
    } 
} 

ChildDoItメソッドを実装する必要があります。

あなたも、その後Parentクラスabstract、インタフェースのメソッドabstractすることができます。

0

interfaceの実装は、newキーワードとは関係がありません。

newキーワードあなたが実装としてインターフェイスを使用したい場合は、その親

public class Parent{ 
    public void SayHello(){ 
     Console.WriteLine("Hello from parent"); 
    }  
} 

と子

public class Child : Parent { 
    public new void SayHello(){ 
     Console.WriteLine("Hello from child"); 
    }  
} 

から継承されたメソッドに新しい振る舞いを定義する際に使用していますnewキーワードを使用する必要はありません

+0

私は何を求めているのでしょうか、どうしてインターフェイスが継承されないのですか – LamonteCristo

+1

私は理解しています。この回答を見てください。http://stackoverflow.com/questions/2866987/what-is-the-definition-of-interface -in-object-oriented-programming – jcvegan