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

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

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

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

Q&A

解決済

1回答

1109閲覧

継承外の値を取得する方法(?)

ant3ng

総合スコア14

Java

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

0グッド

0クリップ

投稿2018/03/24 06:28

前提・実現したいこと

継承外の値を取得(?) (複数の)座標の値を表示する方法(?) (問題点を自分自身で上手く言語化できていないため、下記を読んで下さい。)

発生している問題・エラーメッセージ

・エラー   下記のソースコードから   "[円を描画] 中心点(Point@39d3030a)"と表示される ・目標   "[円を描画] 中心点(100, 100)"と表示させたい。

該当のソースコード

Java

1public class Main{ 2 public static void main(String[] args){ 3 Figure figure = new Circle(100, 100, 20); 4 figure.draw(); 5 } 6}
public interface Figure{ void draw(); }
public class Point extends Object { private int x; private int y; public Point() {this.x = 0; this.y = 0;} public Point(int x, int y){this.x = x; this.y = y;} public int getX() {return this.x;} public void setX(int x) {this.x = x;} public int getY() {return this.y;} public void setY(int y) {this.y = y;} }
public abstract class Shape implements Figure { public abstract void draw(); }
public class Circle extends Shape{ private Point center; private int radius; public Circle(int x, int y, int radius){ this.center = new Point(x, y); this.radius = radius; } public void draw(){ System.out.println("[円を描画] 中心点(" + this.center); } }

試したこと

Circle.draw()における、this.centerが違うということには見当がついています。
Point.getX()やPoint.getY()かな?、とも思いましたが、staticではない(=Class Fieldではない)ため、使用できませんでした。

補足質問

Figure figure = new Circle(100, 100, 20); ではなく Circle circle = new Circle(100, 100, 20); の場合だと、エラーが発生したのですが、この理由もわからないため教えてください。 よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

単に出力したいだけなら、Object#toStringをオーバーライドすれば良いかと。
Pointクラスに次のメソッドを追加してみてください。

Java

1@Override 2public String toString() { 3 return String.format("(%d, %d)", x, y); 4}

補足質問は再現できませんでした。
インスタンス名を変えたのにfigure.draw()のままにしていたとか、そういう凡ミスでは。


また、Shapeクラスの必要性もちょっと気になりました。
Circleクラスが直接Figureインターフェースを実装すれば良いのではないでしょうか。

その他気になるところをちょいちょい修正してみました。参考になれば幸いです。Wandbox

投稿2018/03/24 06:30

編集2018/03/24 06:50
LouiS0616

総合スコア35660

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

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

ant3ng

2018/03/24 06:51

解答ありがとうございます。無事表示されました。 ごめんなさい、補足質問に関しては、もう一度やり直したらできました。 教材の練習問題(他にもPolygon, Triangle ,Circle, Square...classなども作成する)で、CircleクラスがShapeクラスを継承するように指定されていたため、それに従っています。 ただ、InterfaceからAbstract classにしただけなので、自分も必要性に疑問を感じていました。
LouiS0616

2018/03/24 06:53

解決されたようで何よりです。 インターフェースFigureの定義も課題の要件の内なのでしょうか? 指定されているのならば、今後拡張するうえで必要になってくるのかもしれませんね。
ant3ng

2018/03/24 07:01

Interface Figureは作成するように指示されていました。 (本来、他のメソッドも書くように指示されていますが、質問のために省いています。)
ant3ng

2018/03/24 07:39

追加で質問してもよろしいですか? Circleクラスに似たクラス(Line, Triangle...)などを作成するにあたって、変数が複数(x1,y1, x2,y2やrなど)になり、Pointクラスのx, yだけでは対応できないことに気が付きました。 そのため、Pointクラスではなく、Circleクラス内で数値を表示する方法を教えていただけますか...?
LouiS0616

2018/03/24 07:44

それならば、Lineクラスは二つの(両端の)Pointインスタンスを持つように、Triangleクラスは三つの(各頂点の)Pointインスタンスを持つようにすれば良いのでは? Pointクラスは『ただの点』のはずなので、x2やy2を持つことは好ましくありません。
ant3ng

2018/03/24 09:40

public class Line implements Figure { private Point p1; private Point p2; public Line() { this.p1 = new Point(0,0); this.p2 = new Point(0,0); } public Line(int x1, int y1, int x2, int y2){ this.p1 = new Point(x1, y1); this.p2 = new Point(x2, y2); } public void draw() { System.out.println("[線を描画] 始点" + this.p1 + "から終点" + this.p2 + "まで"); 質問以前から、上のソースコードを書いていましたが、利用している開発環境がきちんと機能しておらず、ソースコード自体が誤りだと勘違いしてしまいました。 他の環境で動作させたところ上記ソースコードで機能しました。。 ご迷惑をおかけしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問