• 締切済み

java これはオーバーロードすればいいのでは?

以下のようなコードについて質問です。 class Person { public static int count = 0; public String firstName; public String middleName; public String lastName; public int age; public double height; public double weight; Person(String firstName, String lastName, int age, double height, double weight) { Person.count++; this.firstName = firstName; this.lastName = lastName; this.age = age; this.height = height; this.weight = weight; } Person(String firstName, String middleName, String lastName, int age, double height, double weight) { this(firstName, lastName, age, height, weight); this.middleName = middleName; } public String fullName() { if(middleName == null){ return this.firstName + " " + this.lastName; }else{ return this.firstName + " "+middleName+ ""+ this.lastName; } } fullName() メソッドを条件分岐して、以下のようなメソッドで、ミドルネームを入れるかどうかで、条件分岐するということなのですが… class Main { public static void main(String[] args) { Person person1 = new Person("Kate", "Jones", 27, 1.6, 50.0); person1.printData(); Person person2 = new Person("John", "Christopher", "Smith", 65, 1.75, 80.0); person2.printData(); Person.printCount(); } } これって、引数にfullNameメソッドに何も指定してなくていいのでしょうか。 疑問に感じてしまいました。 また、同じfullNameメソッドという名前のメソッドで引数でmiddleNameの有無だけ変えてオーバーロードしてはだめなのでしょうか。

みんなの回答

  • hiodraiu
  • ベストアンサー率15% (451/2846)
回答No.1

設計思想の話のようですが、要件を満たすことができれば何でも良いです。 最良の設計を考えるなら、そのクラスの使われ方が分からないと答えは出ないです。 この質問には、fullNameメソッドは実装のみ使われていません。仕様はコードから見ると、ミドルネームがない場合は、ファーストネーム、スペース、ラストネームを出力し、ミドルネームがある場合は、ファーストネーム、スペース、ミドルネーム、スペース、ラストネームを出力するみたいですが、そもそもコードから仕様を読み取って、それの正しい設計を問うのって順番が逆じゃないですか? それと、下記の文の「てにをは」がおかしいです。意味が分からないです。 > これって、引数にfullNameメソッドに何も指定してなくていいのでしょうか。 >また、同じfullNameメソッドという名前のメソッドで引数でmiddleNameの有無だけ変えてオーバーロードしてはだめなのでしょうか。 上記の件ですが、ミドルネームの有無は、コンストラクタで決まってますが、fullNameメソッドで指定できるのですか?つまり、コンストラクタでミドルネームを指定しなかったインスタンスに対して、fullNameの引数でミドルネーム有りを指定した場合や、その逆はどういう動きが、仕様的に見て正解ですか?

関連するQ&A