• ベストアンサー

メソッドの呼び出し方

サブクラスを記述する下記のプログラムについて質問します。 class Car { //タイヤ private String tire = ""; public Car() { tire = "タイヤ"; } /* *どんなタイヤであるかを設定 *value タイヤの種類 */ public void setTire(String value) { tire = value + "のタイヤ"; } /* *作成されたタイヤを返します *return タイヤ */ public String getTire() { return tire; } } class Motorcar extends Car { private String tire = ""; private String body = ""; private String handle = ""; String type = ""; public Motorcar() { tire = "タイヤ"; body = "車体"; handle = "ハンドル"; } public String getTire() { return tire; } public String getBody() { return body; } public String getHandle() { return handle; } public String createMotorcar(String t) { type = t; tire = type + "のタイヤ"; return tire; } } public class Sample1 { public static void main(String atgs[]) { Motorcar car = new Motorcar(); String type = "トラック"; String tire = car.getTire(); String body = car.getBody(); String handle = car.getHandle(); System.out.println("タイヤ=" + tire); System.out.println("車体=" + body); System.out.println("ハンドル=" + handle); //どんな車かを設定 car.createMotorcar(type); tire = car.getTire(); body = car.getBody(); handle = car.getHandle(); System.out.println(type + "の作成!!"); System.out.println("タイヤ=" + tire); System.out.println("車体=" + body); System.out.println("ハンドル=" + handle); } } これを実行したら、 タイヤ = タイヤ 車体 = 車体 ハンドル = ハンドル トラックの作成!! タイヤ = トラックのタイヤ 車体 = 車体 ハンドル = ハンドル となりました。 後半の車体・ハンドルにも「トラックの」という言葉 を入れるには、どういうふうにメソッドを記述したらよいのでしょうか? ちなみに問題では、サブクラスだけ自分で記述し、スーパークラス・ 実行クラスはこのまま利用することとします。

noname#205525
noname#205525
  • Java
  • 回答数5
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
  • auty
  • ベストアンサー率58% (284/486)
回答No.3

mahojula様の言われているのは、こういうことだと思います。 public void createMotorcar(String t) { type = t; tire = type + "の" + tire; body = type + "の" + body; handle = type + "の" + handle; }

noname#205525
質問者

お礼

はい、もう解決済みなんですが、このように 記述して無事出力されました。 autyさんにはいつも返答いただき感謝しています。 ありがとうござます!!

その他の回答 (4)

  • mahojula
  • ベストアンサー率32% (21/65)
回答No.5

なるほど  redfox63様の考えが一番問題の意図を汲み取ってる気がします。。。  徹底的に詰めてくなら   public void createMortercar( String t ){     type = t;     setTire(t);     setHandle(t);    setBody(t); } public void setHandle(String value){ handle = value + "のハンドル"; } public void setBody(String value){ body = value + "のボディ"; }   public String getHandle(){     return handle;   }   public String getbody(){     return body;   }     みたいな感じでいかがでしょう。。?  

noname#205525
質問者

お礼

なるほど・・・ 実はもう解決済みで、自分の記述とはちょっと違うんですが、 教えてくださった方法でも記述して試してみます! ありがとうございました。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

サブクラス Motercarを スパークラスに習って記述せよ といった問題なのではないですか class Mortercar extends Car {   private String body = "";   private String handle = "";   private String type = "";   public String getHandle()   {     if ( type != "" ) {       // typeが設定されている場合       return type + "の" + handle;     }     return handle;   }   public String getbody()   {     if ( type != "" ) {       // typeが設定されている場合       return type + "の" + body;     }     return body;   }   public void createMortercar( String t )   {     type = t;     // ここでスーパークラス Carの setTireを呼ぶ     setTire( t );   } } と言った具合でいいと思いますよ

noname#205525
質問者

お礼

>サブクラス Motercarを スパークラスに習って記述せよ  といった問題なのではないですか はい、そうです。 「スーパークラス(変更しない)を継承するサブクラスMotercar を記述せよ」といった問題でした。 わざわざ書いてくださったんですね。 ありがとうございました!

  • mahojula
  • ベストアンサー率32% (21/65)
回答No.2

public String createMotorcar(String t) { type = t; tire = type + "のタイヤ"; return tire; } これ戻り値使ってないからvoid形で 良いのじゃない? フィールドは tireだけ入らないぽいですね。 このcreateMotorcarメソッドで  タイヤだけじゃなくすべての文字列を変更させてみましょうね。

noname#205525
質問者

お礼

>これ戻り値使ってないからvoid形で 良いのじゃない?  フィールドは tireだけ入らないぽいですね。 そうでした。戻り値を設定するつもりでStringにしたんですが、 別のメソッドで戻り値を設定したので、void型に書き直しました。 >このcreateMotorcarメソッドで  タイヤだけじゃなくすべての文字列を変更させてみましょうね。 ありがとうございます、このメソッドの記述を変更してみたら 実行出来ました。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

ぜんぜん見てないけど、スーパークラスに tire フィールドがあるなら、もうサブクラスに tire フィールドは要らんのでは?

noname#205525
質問者

お礼

その通り!!でした。 ありがとうございました。

関連するQ&A

  • 間違い箇所を教えてください。

    サブクラスを記述する下記のプログラムについて質問します。 class Car { //タイヤ private String tire = ""; public Car() { tire = "タイヤ"; } /* *どんなタイヤであるかを設定 *value タイヤの種類 */ public void setTire(String value) { tire = value + "のタイヤ"; } /* *作成されたタイヤを返します *return タイヤ */ public String getTire() { return tire; } } class Motorcar extends Car { private String tire = ""; private String body = ""; private String handle = ""; String type = ""; public Motorcar() { tire = "タイヤ"; body = "車体"; handle = "ハンドル"; } public String getTire() { return tire; } public String getBody() { return body; } public String getHandle() { return handle; } public String createMotorcar(String t) { type = t; tire = type + "のタイヤ"; return tire; } } public class Sample1 { public static void main(String atgs[]) { Motorcar car = new Motorcar(); String type = "トラック"; String tire = car.getTire(); String body = car.getBody(); String handle = car.getHandle(); System.out.println("タイヤ=" + tire); System.out.println("車体=" + body); System.out.println("ハンドル=" + handle); //どんな車かを設定 car.createMotorcar(type); tire = car.getTire(); body = car.getBody(); handle = car.getHandle(); System.out.println(type + "の作成!!"); System.out.println("タイヤ=" + tire); System.out.println("車体=" + body); System.out.println("ハンドル=" + handle); } } このまま実行すると、後半の System.out.println("タイヤ=" + tire); System.out.println("車体=" + body); System.out.println("ハンドル=" + handle); この部分の出力結果が タイヤ = タイヤ 車体 = 車体 ハンドル = ハンドル となりますよね? それを タイヤ = トラックのタイヤ 車体 = トラックの車体 ハンドル = トラックのハンドル という風にしたいのですが、どう記述したらよいのでしょうか? //どんな車かを設定 car.createMotorcar(type); tire = car.getTire(); body = car.getBody(); handle = car.getHandle(); ここでメソッドを呼び出したときに tire・body・handleのそれぞれに「トラックの」という言葉が 追加されるようにメソッドを記述しなければいけないと 思うのですが、最初に呼び出すときは必要ないので どうすればよいのかが分かりません。 教えて下さい、お願いします。 長くてすみません・・・

  • webアプリを作ってます。 A result was returned

    webアプリを作ってます。 A result was returned web アプリを作ってます。 A result was returned when none エラー が出て原因がわかりませんでした。 どこがおかしいのか教えてください。 package info.searchman; import java.io.*; import java.sql.*; //import java.util.*; public class KensakuBeans implements Serializable { /** * */ private static final long serialVersionUID = 1L; private String Id; private String name; private String older; private String taiju; private String shintyo; private String other; private String[] results; //Constructor public void Kensaku2Beans() { System.out.println("sitb constructor"); } public void setName(String name) { this.name = name; System.out.println("dkb setter" +name); } // Getting Methods public String getId() { return this.Id; } public String getName() { return this.name; } public String getOld() { return this.older; } public String getTaiju() { return this.taiju; } public String getShintyo() { return this.shintyo; } public String getOther() { return this.other; } public int getCountOfResults() { System.out.println("ucb10"); if (results==null) return 0; else System.out.println("ucb10 else"); return results.length; } public String getResult(int index) { System.out.println("ucb11"); return results[index]; } //execute kensaku public void kensaku() { try { System.out.println("++++" +name); System.out.println("dkb7 insert"); //JDBC Driver Class.forName("org.postgresql.Driver"); System.out.println("dkb7 kensaku2"); Connection con = DriverManager.getConnection("jdbc:postgresql:postgres","postgres","gokui"); Statement stmt = con.createStatement(); System.out.println("dkb7 kensaku3"); String table = "test"; System.out.println(table); System.out.println("dkb7 kensaku4"); System.out.println(name); System.out.println("dkb7 kensaku5"); その2に続く http://okwave.jp/qa/q5933123.html

  • equals()メソッドの継承について

    ある本に ーーーーーーーーーーーーーーーーーーーーー class Car { protected int num; protected double gas; public Car() { num = 0; gas = 0.0; System.out.println("車を作成しました。"); } } class Sample8 { public static void main(String[] args) { Car car1 = new Car(); Car car2 = new Car(); Car car3; car3 = car1; boolean bl1 = car1.equals(car2); boolean bl2 = car1.equals(car3); System.out.println("car1とcar2が同じか調べたところ" + bl1 + "でした。"); System.out.println("car1とcar3が同じか調べたところ" + bl2 + "でした。"); } } JavaのクラスはすべてObjectクラスのメンバを継承していますので、equals()メソッドを記述しなくても、このメソッドを呼び出すことが出来るわけです。 ----------------------------------------- JavaのクラスはすべてObjectクラスのメンバを継承していますので、equals()メソッドを記述しなくても、このメソッドを呼び出すことが出来る    についてですが、 逆から言えば他の言語の場合は本来クラスの宣言の辺りにでもequals()メソッドを記述する必要があるという意味なんでしょうか?

    • ベストアンサー
    • Java
  • 実行するにはどうすれば良いのでしょうか?

    まず、 class Car{ private String name; private int width; private int height; private int length; private double x; private double y; private double fuel; Car(String name,int width,int height,int length,double fuel){ this.name=name; this.width=width; this.height=height; this.length=length; this.fuel=fuel; x=y=0; } double getX() {return x;} double getY() {return y;} double getFuel() {return fuel;} void putSpec(){ System.out.println("名前:"+name); System.out.println("車幅:"+width+"mm"); System.out.println("車高:"+height+"mm"); System.out.println("車長:"+length+"mm"); } boolean move(double dx, double dy){ double dist = Math.sqrt(dx*dx+dy*dy); if(dist < fuel) return false; else { fuel -= dist; x += dx; y +=dy; return true; } } } のファイルをcar.javaと名前をつけて保存しました。 次に import java.util.Scanner; class CarTester2{ public static void main(String[] args){ Scanner stdIn = new Scanner(System.in); System.out.println("車のデータを入力せよ。"); System.out.println("名前は:"); String name = stdIn.next(); System.out.println("車幅は:"); int width = stdIn.nextInt(); System.out.println("高さは:"); int height =stdIn.nextInt(); System.out.println("長さは:"); int length =stdIn.nextInt(); System.out.println("ガソリン量は:"); double fuel= stdIn.nextDouble(); Car myCar = new Car(name,width,height,length,fuel); while(true){ System.out.println("現在地("+myCar.getX()+","+myCar.getY()+")・残り燃料"+myCar.getFuel()); System.out.print("移動しますか[0…No/1…Yes]:"); if(stdIn.nextInt()==0) break; System.out.print("X方向の移動距離:"); double dx = stdIn.nextDouble(); System.out.print("Y方向の移動距離:"); double dy = stdIn.nextDouble(); if(!myCar.move(dx,dy)) System.out.println("燃料が足りません!"); } } } のファイルをCarTester2.javaという名前で保存しました。 この2つのファイルは同一フォルダに入っています。 それで、 javac CarTester2.javaという風にコンパイルしても 「エラー4  変数myCarのシンボルが見つけられません」 といった感じにコンパイルエラーとなってしまいます。 何が原因なのでしょうか?

  • Javaの問題

    (1) /* CarApp.java */ public class CarApp{ public static void main(String[] args){ Car c2 = new Car(4,45,5); System.out.println("乗員数:"+c2.getPeple()); System.out.println("タイヤ数:"+c2.getTire()); System.out.println("ガソリン残量:"+c2.getGas()); c2.setPeople(8); c2.ridePeople(10); c2.ridePeople(3); for(int i=0; i<179; i++) c2.speedUp(); for(int i=179; i<182; i++){ c2.showSpeed(); c2.speedUp(); } for(int i=0; i<179; i++) c2.speedDown(); for(int i=179; i<182; i++){ c2.showSpeed(); c2.speedDown(); } } } ____________________________________ /* Car.java */ class Car{ private int tire , people , speed ; //タイヤ数、乗員数、速度 private int 【****】,【***】; private double gas; //ガソリン public Car(int tire, double gas, int people){ this.tire = tire; this.gas = gas; this.people = people; speed = 180; nowPeople = 0; nowSpeed = 0; } public double getGas(){ 【****】} public int getPeople() { 【****】 } public int getTire() { 【****】 } public int getSpeed() { 【****】 } public void setSpeed(int speed){ this.speed = speed; } public void speedUp( ) { if(speed < nowSpeed+1 ){ 【****】 【****】 } else{ nowSpeed++; } } public void speedDown( ) { if(nowSpeed-1<0){ 【****】 else{ nowSpeed--; } } public void showSpeed( ) { 【****】 } public void setPeople(int people){ 【****】 showPeople( ); } public void ridePeople(int ride) { int tmp = nowPeople + ride; if(【****】 ) { 【****】; } else { 【****】; } showPeople( ); } public void showPeople( ) { System.out.println(【****】) ; } public void show(){ System.out.println("タイヤ数" + tire); System.out.println("ガソリン" + gas); System.out.println("乗員数:" + people); } } 実行結果 >java CarApp2 ガソリン残量:45.0 定員数:8 現在の乗員数:0 定員オーバーです 定員数:8 現在の乗員数:0 定員数:8 現在の乗員数:3 速度:180 現在の速度:179 速度:180 現在の速度:180 最大速度です 速度:180 現在の速度:180 最大速度です 速度:180 現在の速度:1 速度:180 現在の速度:0 既に停止しています 速度:180 現在の速度:0 既に停止しています ___________________ (2) /* RaceCarApp2.java */ public class RaceCarApp2{ public static void main(String[] args){ RaceCar2 rc2 = new RaceCar2("JapanTour", "TouringCar",350); System.out.println("乗員数:" + rc2.getPeople()); System.out.println("タイヤ数:" + rc2.getTire()); System.out.println("ガソリン残量:"+rc2.getGas()); rc2.show(); for(int i=0; i<349; i++) rc2.speedUp(); for(int i=349; i<352; i++){ rc2.showSpeed(); rc2.speedUp(); } for(int i=0; i<349; i++) rc2.speedDown(); for(int i=349; i<352; i++){ rc2.showSpeed(); rc2.speedDown(); } } } _______________________________ class RaceCar2 extends Car{ String raceName; String type; public RaceCar2( String raceName, String type , int speed ){ 【****】; //親のコンストラクタ this.raceName = raceName; this.type = type; 【****】; //スピード設定 } public void show(){ 【****】; 【****】; 【****】; } } 実行結果 >java RaceCarApp2 乗員数:0 タイヤ数:4 ガソリン残量:30.0 Type:TouringCar RaceName:JapanTour タイヤ数4 ガソリン30.0 乗員数:1 速度:350 現在の速度:349 速度:350 現在の速度:350 最大速度です 速度:350 現在の速度:350 最大速度です 速度:350 現在の速度:1 速度:350 現在の速度:0 既に停止しています 速度:350 現在の速度:0 既に停止しています __________________________ この様になるように【****】部分を埋め回答せよという問題です。 途中まで自分でやってみましたが、エラーが出てしまうため断念してしまいました。 回答お願いします。

  • toStringメソッドについて

    java言語超初心者です。以下のコードを入力しました。 class MyCls1 { String name; int count; public void look() { System.out.println("名前" + name + "個数" + count); } } class MyCls2 { String name; int count; public void look() { System.out.println("なまえ" + name + "こすう" + count); } public String toString() { String str = "MyCls2:name = " + name + "count=" + count; return str; } } public class JaCls06 { public static void main(String args[]) { MyCls1 bbb = new MyCls1(); bbb.name = "AAA"; bbb.count = 111; bbb.look(); System.out.println(bbb); MyCls2 dd = new MyCls2(); dd.name = "BBB"; dd.count = 2222; dd.look(); System.out.println(dd); String ee; ee = dd.toString(); System.out.println(ee); } } 実行結果が 名前AAA個数111 MyCls1@19821f なまえBBBこすう2222 MyCls2:name = BBBcount=2222 MyCls2:name = BBBcount=2222 なんですが、2行目以降の結果がどの行を反映して出てきたのかが全くわかりません。どうか、教えてください。初歩的な質問で申し訳ないです。

    • ベストアンサー
    • Java
  • 再帰メソッドについて

    いつもお世話になっております。 再帰メソッドについて質問があります。 後述のプログラム実行後、以下の結果が 得られました。 ********** depth = [0] , value = [0] ********** depth = [1] , value = [1] ********** depth = [2] , value = [2] ########## depth = [2] , value = [3] …★ ########## depth = [1] , value = [3] recursionMethod() は3回呼ばれました。 (以下、ソース) public class RecursionTest { private static final int MAX_DEPTH = 2; private static int cnt = 0; private int val =0; public static void main(String[] args) { // 再帰メソッドの呼び出し RecursionTest own = new RecursionTest(); own.recursionMethod(0); System.out.println("\n recursionMethod() は" + cnt + "回呼ばれました。"); } private void recursionMethod(int depth) { // 再帰メソッドが呼ばれた回数をカウントする cnt++; System.out.println("********** depth = [" + depth + "] , value = [" + val + "]"); val++; // パラメータ depth が MAX値に到達したら、return する if (depth++ >= MAX_DEPTH) { return; } // 自分自身の呼び出し recursionMethod(depth); System.out.println("########## depth = [" + depth + "] , value = [" + val + "]"); } } 実行結果の★以降が得られる理由が全く分かりません。 ・return で main() に戻るはずなのになぜ「###~」のログが出力されるのか ・depth の値がなぜデクリメントされるのか (誰がデクリメントの処理をしているのか) そもそも上記の結果を返すことが「メソッドの再帰的呼び出し」ということなのでしょうか? ご教授頂ける方がいらっしゃいましたら、宜しくお願い致します。

    • ベストアンサー
    • Java
  • getter、setterメソッドを活用したいです

    Javaのgetter、setterメソッドをうまく使って、下記のコードを実行しようとしたのですが。 ---------------- package javatest; public class Jidosha { private int num; private double gas; public void setNum(int num) { this.num = num; } public void setGas(double gas) { this.gas = gas; } public int getNum() { return num; } public double getGas() { return gas; } public static void main(String args[]) { System.out.println("この車のナンバーは" + num + "です。"); System.out.println("この車のガソリンが入る最大量は " + gas + "です。"); } } ---------------- Eclipse上では「System.out.println・・・」のところで「非 static フィールド gas を static 参照できません」といったエラーが出てきまして。 getter、setterメソッドをうまく活用して「この車のナンバーは××××です」「この車のガソリンが入る最大量は〇〇〇〇です。」という文を出力するには、どう書けばよいでしょうか。 よろしくお願い致します。 ※OKWAVEより補足:「Webシステム開発」についての質問です。

    • ベストアンサー
    • Java
  • 初心者で練習問題をしています

    Javaで練習問題をしています Carというclassを作成して(public, privateを明示) フィールドはStringでmake(型式),colour(色),intでfuel(燃料)です。 コントラクタを作成して、 car1:make(Ferarri),colour(red),intでfuel(100) car2:make(Volvo),colour(blue),intでfuel(200) car3 = car2、 ↓ car2では色をgreenにし、car3では燃料を20使うと car2:make(Volvo),colour(green),intでfuel(180) car3:make(Volvo),colour(green),intでfuel(180) 両方とも180になってしまいますが、 (greenはいっしょになってかまいません) car2の燃料を200のまま減らないようにするには どうしたらいいでしょうか どうぞよろしくお願いします。 Public class Car { . . public void setColour(String newColour) { colour = newColour; } public void useFuel(int amount) { fuel = fuel - amount; } public static void main(String[] args) { Car car2 = new Car(); car2.make = "Volvo"; car2.colour = "blue"; car2.fuel = 200; System.out.println("car2make="+car2.make); System.out.println("car2colour="+car2.colour); car2.toString(car2.colour,car2.make); Car car3 = new Car(); car3 = car2; car2.setColour("green"); System.out.println("car2colour=blue -> green"); System.out.println("car2colour="+car2.colour); System.out.println("car3colour="+car3.colour); car3.useFuel(20); System.out.println("car2fuel="+car2.fuel); System.out.println("car3fuel="+car3.fuel); } . .

    • ベストアンサー
    • Java
  • Javaの戻り値のコード

    Java初心者です。returnの例文で分からない所があります。 (1)考え方として car1.setNumGas(1234, 20.5); の時点で void setNumGas(int n, double g) はvoid setNumGas(1234, 20.5)になり 次にgetNum( ) そのものを引っ張ってきているので、 ナンバーを調べました という文字まで一緒に引っ張らないのでしょうか? なぜ 次の行のretun文だけを拾うのですか? (2)returnのイメージがまだ出来ていません。 int number = car1.getNum(); とした時点で int getNum()  にジャンプし、 その中の returnを見つけ、 そしてreturnが numを使っている所をコードを下に降りて順に探しに行く というイメージで合ってますか? -------------------------------------------------------------------- return num; →よーし探しに行こう! まずdouble getGas()の中 → うーんない 次にvoid setNumGas(int n, double g) の中 { num = n;    →   お、あった! nは今1234だな、だから表示結果は1234 --------------------------------------------------------------------------- こんな認識で合ってますでしょうか? class Car { int num; double gas; int getNum() { System.out.println("ナンバーを調べました。"); return num; } double getGas() { System.out.println("ガソリン量を調べました。"); return gas; } void setNumGas(int n, double g) { num = n; gas = g; System.out.println("車のナンバーを" + num + "にガソリン量を" + gas + "にしました。"); } void show() { System.out.println("車のナンバーは" + num + "です。"); System.out.println("ガソリン量は" + gas + "です。"); } } class Sample6 { public static void main(String[] args) { Car car1 = new Car(); car1.setNumGas(1234, 20.5); int number = car1.getNum(); double gasoline = car1.getGas(); System.out.println("サンプルから車を調べたところ"); System.out.println("ナンバーは"+ number + "ガソリン量は" + gasoline + "でした。"); } }

    • ベストアンサー
    • Java

専門家に質問してみよう