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$
動物は吠えるメソッドを持っていませんので、エラーとなりました。
正しいエラーです。
だんだん、継承のことが分かってきた気がします。


コメント