javaの入門書を読み終えた(ことにした)のでオブジェクト指向についてネット上にある問題をやってみました。
北ソフト工房というサイトの問題で7-1~7-4と8-1~8-4をやったのでそれについて書きます。
Twitterに投稿してたら教えてくれる方がいて助かりました。
他にもオブジェクト指向についての問題をやってみたいのですがネット上で見つ見つけられませんでした。
7-1~7-4について
DogクラスのSetName()でvoidだと何も返らないしそうならばreturnが必要ではないかと考えたのですが、これは不要で正解でした。
これは、何か(この場合、Name)を返す必要がなくNameはDogクラスで持っているから。そして、mainクラスから見に行くからというものでした。
疑問
問題文でmainクラスからDogクラスに名前を指定するというのはなぜ分かるのでしょうか?
問題8に入ってから気づいたのですが7はなぜメンバがprivateなのでしょうか?8はpublicになっています。8はクラスを継承して作るのでそれが関係しているのでしょうか?わかりません。
8-1~8-4いついて
Animalクラスの変数にmainクラスからNameとAgeを指定しようと考えたのですがこれは間違いでした。
CatクラスはAnimalクラスを継承しているのでAnimalクラスで宣言されている変数はCatクラスにも存在するのでした。Animalクラスの変数にmainクラスからNameやAgeを指定しようとすると、Catクラス以外にもDogクラスやBirdクラスがAnimalクラスを継承してれば猫も犬も鳥も全て同じNameとAge(たま、3歳)になってしまうのでした。
8-4でクラスの配列を作成します。解答は下記のようになっているのですがMyPets[0] = new Cat();の「new」は不要なのでは?コンパイルエラーになるし、と考えたのですがこれは8-3までのソースを消しているからでした。8-4ではnew Catを前もってやってないのでした。
Animal[] MyPets = new Animal[4];
MyPets[0] = new Cat();
MyPets[1] = new Dog();
MyPets[2] = new Cat();
MyPets[3] = new Dog();
for( Animal Pet : MyPets )
Pet.Speak();
疑問
8-3でオーバーライドが出てきますがEclipseで自動生成するとsuper.Speak();となります。解答ではSystem.out.println( "ニャー" );となっています。
確かに後者でよいのですが、そうするとsuperはどういうときに使うのでしょうか?分かりません。
全体的に
ソースコードの記述は実務的にはキャメル式というのを用いるそうですが、そうなっていません。例えばSetNameとなっているのはキャメル式でsetNameです。変数の宣言の時点でNameではなくnameと書きます。人や業界によって違うのかもしれません。
0 件のコメント:
コメントを投稿