質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

893閲覧

抽象メソッドと継承について

papikonoqui

総合スコア10

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2020/06/12 15:23

戻り値が0になってしまう

この3つのメソッドの関係は AnotherShape(親)← AnotherRectangle(子) ← AnotherSquqre(孫)です。
これを実行すると、なぜか矩形と正方形の面積が0になってしまいました。
ずっと眺めていましたが、原因がわからないままです。
どなたかアドバイスをくれればありがたいです。

public class Main { public static void main(String[] args) { Main m = new Main(); m.start(); } public void start() { AnotherRectangle r = new AnotherRectangle(); r.setX(10); r.setY(20); r.setWidth(30); r.setHeight(20); r.move(30, 40); r.scaleX(1.5); r.scaleY(2.5); System.out.println("矩形の座標は(" + r.getX() + ", " + r.getY() + ")"); System.out.println("矩形の幅は" + r.getWidth() + "、高さは" + r.getHeight()); System.out.println("矩形の面積は" + r.getArea()); AnotherSquare q = new AnotherSquare(); q.setX(10); q.setY(20); q.setSide(10); q.scale(2.0); System.out.println("正方形の座標は(" + q.getX() + ", " + q.getY() + ")"); System.out.println("正方形の辺の長さは" + q.getSide()); System.out.println("正方形の面積は" + q.getArea()); } }
public abstract class AnotherShape { private int x = 0; private int y = 0; private int width; private int height; public void setX(int xx){ x = xx; } public int getX(){ return x; } public void setY(int yy){ y = yy; } public int getY(){ return y; } public void setWidth(int w){ width = w; } public int getWidth(){ return width; } public void setHeight(int h){ height = h; } public int getHeight(){ return height; } public void move(int dx, int dy){ x = x + dx; y = y + dy; } public void scaleX(double radio){ width = (int)(width * radio); } public void scaleY(double radio){ height = (int)(height * radio); } public abstract double getArea(); }
public class AnotherRectangle extends AnotherShape{ public double getArea(){ return (getWidth() * getHeight()); } }
public class AnotherSquare extends AnotherRectangle{ public void setSide(int s){ super.setWidth(s); } public int getSide(){ return super.getWidth(); } public void scale(double radio){ super.scaleX(radio); } public void setWidth(int w){ super.setWidth(w); } public void setHeight(int h){ super.setHeight(h); } public void scaleX(double radio){ super.scaleX(radio); } public void scaleY(double radio){ super.scaleY(radio); } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gentaro

2020/06/12 15:24

質問する前にデバッグ実行とかやったんすか?
guest

回答1

0

ベストアンサー

Java

public class AnotherSquare extends AnotherRectangle{
public void setSide(int s){
super.setWidth(s);
}

widthだけに値がセットされていて、heightが初期値0のままです。

ずっと眺めていましたが、原因がわからないままです。

バグの原因って得てして思い込みに起因するものなので、実際に手を動かすことが大切です。
デバッガを利用したり、片端から値を出力してみたり。

ついでに

Java

public class AnotherSquare extends AnotherRectangle{
...
public void setWidth(int w){
super.setWidth(w);
}
public void setHeight(int h){
super.setHeight(h);
}
public void scaleX(double radio){
super.scaleX(radio);
}
public void scaleY(double radio){
super.scaleY(radio);
}

これらのメソッドはどれも不要です。

投稿2020/06/12 16:06

編集2020/06/12 16:08
LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papikonoqui

2020/06/12 16:11

丁寧な回答ありがとうございます。 デバッガを勉強して、自分の力で修正できるようがんばります!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問