myname=”動物”ってのを、継承で”犬”に上書きしようとしてたこと自体が間違っていたかもしれません。犬は動物であることに変わりありませんから。上書きして違うものにしてはいけないと思うんです。継承って変身することではないですからね。
動物という情報は残しつつ、継承したときに、分類名が増えるようにするのが正解でしょう。
動物という情報は、classnameという変数に格納することにします。
そして、犬という情報は、familynameに格納します。
takk@deb9:~/vbtest$ cat -n test.vb 1 Imports System.Console 2 3 Public Class Animal 4 Public classname As String = "哺乳類" 5 Sub Tell() 6 WriteLine( classname & "です") 7 End Sub 8 End Class 9 10 Public Class Dog : inherits Animal 11 Public familyname As String = "犬" 12 Sub Tell() 13 WriteLine( MyBase.classname & "で" & familyname & "です") 14 End Sub 15 End Class 16 17 Public Class TestClass 18 <STAThread()> _ 19 Shared Sub Main() 20 dim dog as new Dog() 21 dog.Tell() 22 End Sub 23 24 End Class takk@deb9:~/vbtest$
このようになりました。
ビルド。
takk@deb9:~/vbtest$ vbnc test.vb Visual Basic.Net Compiler version 0.0.0.5943 (Mono 4.0.1 - tarball) Copyright (C) 2004-2010 Rolf Bjarne Kvinge. All rights reserved. Assembly 'test, Version=0.0, Culture=neutral, PublicKeyToken=null' saved successfully to '/home/takk/vbtest/test.exe'. Compilation successful Compilation took 00:00:00.5070190 takk@deb9:~/vbtest$ mono test.exe 哺乳類で犬です takk@deb9:~/vbtest$
犬になって、ようやく吠える、というふるまいができるのだから、BarkメソッドはDogクラスに実装するべきですね。
10 Public Class Dog : inherits Animal 11 Public familyname As String = "犬" 12 Sub Tell() 13 WriteLine( MyBase.classname & "で" & familyname & "です" ) 14 End Sub 15 Sub Bark() 16 WriteLine( "Bowwow" ) 17 End Sub 18 End Class 19 20 Public Class TestClass 21 <STAThread()> _ 22 Shared Sub Main() 23 dim dog as new Dog() 24 dog.Tell() 25 dog.Bark() 26 End Sub 27 28 End Class takk@deb9:~/vbtest$
ビルド、実行。
takk@deb9:~/vbtest$ vbnc test.vb ~省略~ takk@deb9:~/vbtest$ mono test.exe 哺乳類で犬です Bowwow takk@deb9:~/vbtest$
Animalもつかって動物を実装してみます。
20 Public Class TestClass 21 <STAThread()> _ 22 Shared Sub Main() 23 dim dog as new Dog() 24 dog.Tell() 25 dog.Bark() 26 27 dim animal as new Animal() 28 animal.Tell() 29 animal.Bark() 30 End Sub 31 32 End Class takk@deb9:~/vbtest$
ビルドすると、
takk@deb9:~/vbtest$ vbnc test.vb Visual Basic.Net Compiler version 0.0.0.5943 (Mono 4.0.1 - tarball) Copyright (C) 2004-2010 Rolf Bjarne Kvinge. All rights reserved. /home/takk/vbtest/test.vb (29,10) : error VBNC30456: 'Bark' is not a member of 'Animal'. There were 1 errors and 0 warnings. Compilation took 00:00:00.4391430 takk@deb9:~/vbtest$
動物は吠えるメソッドを持っていませんので、エラーとなりました。
正しいエラーです。
だんだん、継承のことが分かってきた気がします。
コメント