C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: インターフェースの定義と実装について


(過去ログ 93 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■55383 / inTopicNo.1)  インターフェースの定義と実装について
  
□投稿者/ れんれん (1回)-(2010/11/29(Mon) 10:45:41)

分類:[C#] 

インタフェースの練習をしていて判らないので質問させていただきます。

Doubutuクラスを継承しているのでNekoクラスでインターフェースを実装する必要はないと思うのですが、
Nekoクラスに「, Pet」を追加しなければ、結果として「ワン!」が出力されてしまいます。
私の想定する結果はMainの中に「Pet pet = neko1;」と指定しているのでNekoクラスに「, Pet」を追加しなくても「ニャン!!」が呼ばれる予定なんですが。。。どうかご教授願います。


メイン
class Program
{
static void Main(string[] args)
{
Hito hito = new Hito("安藤");
Neko neko1 = new Neko("〜省略〜");
Pet pet = neko1;
hito.walk(pet);
}
}


Doubutuクラス
class Doubutu : Pet //インターフェースを実装
{
//散歩に行く
public void go()
{
Console.WriteLine("ワン!");
}
}


Hitoクラス
class Hito
{
public void talk(Pet pet)
{
Console.WriteLine("こんにちは。");
kazoku.go();
}
}



インターフェース
public interface Pet
{
//散歩に行く
void go();
}



Nekoクラス
class Neko : Doubutu, Pet ←←不明点
{
//オーバーライド
public new void go()
{
Console.WriteLine("ニャン!");
}

}



引用返信 編集キー/
■55390 / inTopicNo.2)  Re[1]: インターフェースの定義と実装について
□投稿者/ 囚人 (569回)-(2010/11/29(Mon) 11:46:06)
public new void go()
{
Console.WriteLine("ニャン!");
}



public override void go()

としないといかんのじゃないですかね。
引用返信 編集キー/
■55393 / inTopicNo.3)  Re[2]: インターフェースの定義と実装について
□投稿者/ れんれん (2回)-(2010/11/29(Mon) 12:27:02)
囚人 さん
ご返信ありがとうございます。
> public override void go()

に変更すると、下記エラーが出てしまいました。

エラー 1 'HitoHouse.Neko.go()':
virtual、abstract または override に設定されていないため、継承されたメンバ 'HitoHouse.Pet.go()' をオーバーライドできません。

HitoHouseというのは今回の練習プログラムのプロジェクト名です。
そもそもオーバーライドの方法が間違っているのでしょうか。。自分でも色々と調べてみます。

引用返信 編集キー/
■55397 / inTopicNo.4)  Re[3]: インターフェースの定義と実装について
□投稿者/ 囚人 (570回)-(2010/11/29(Mon) 13:02:21)
あー、失敬。Dobutu の方を
public virtual void go()
にしないとだめですね。

でも、Petというインターフェースを作るなら、Dobutuを継承する必要はないし、Dobutuを継承するならPetというインターフェースは必要ない感じかな。
引用返信 編集キー/
■55398 / inTopicNo.5)  Re[4]: インターフェースの定義と実装について
□投稿者/ れんれん (3回)-(2010/11/29(Mon) 13:40:09)
囚人 さん

> public virtual void go()
> でも、Petというインターフェースを作るなら、Dobutuを継承する必要はないし、Dobutuを継承するならPetというインターフェースは必要ない感じかな。

ありがとうございます。
解決しました。

JAVAしか組んだことなくて、今度の仕事のために色々と試行錯誤していました。
virtual をもっとよく調べてみます。

また何かありましたらよろしくお願いします。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -