重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【解消】通知が届かない不具合について

あるテキストのjavaの問題です。

public class Draw{
  static void pixel(int x,int y){
    /*座標(x、y)に点を描画*/
  }
  static void line(int x1,int y1,int x2,int y2){
    /*座標(x1、y1)~(x2、y2)に線を引く*/
  }
}

で、これを実行するための以下のようなクラス
public class TestDraw{
<ここに入力>
}

という問題なのですが2つまでは絞れたのですが、
(1)
public static void main(String args[]){
  Draw d = new Draw().line(10,10,20,30);
}
↑×
(2)
public static void main(String args[]){
  Draw.line(10,10,20,30);
}
↑○

(2)はlineメソッドがstaticメソッドだからオブジェクト生成しなくても良い、ということなんですが
(1)も正解のような気がするのですが・・・
解説によると「lineはvoidなのでnew Draw().line(10,10,20,30);とすれば正解、とあります。
どうもいまいち理解できません。

クラスメソッドはオブジェクト生成しなくとも良い→オブジェクト生成できない

ということなのでしょうか?

それからちなみに、public classって2つ記述できないんではありませんでしたか?

A 回答 (2件)

> (1)も正解のような気がするのですが・・・


> 解説によると「lineはvoidなのでnew Draw().line(10,10,20,30);とすれば正解、とあります。
> どうもいまいち理解できません。

「Draw d = new Draw().line(10,10,20,30);」はDrawクラスのオブジェクトを生成して
lineメソッドを呼び出し、その戻り値を変数 d に代入しているわけですが、
lineメソッドの戻り値がvoidなのでエラーになります。

「new Draw().line(10,10,20,30);」はDrawクラスのオブジェクトを生成して
lineメソッドを呼び出しているだけなので問題ありません。

> クラスメソッドはオブジェクト生成しなくとも良い→オブジェクト生成できない
> ということなのでしょうか?

オブジェクトが生成できないのではありません。

Draw d = new Draw(); // オブジェクト生成
d.line(10,10,20,30); // lineメソッド呼び出し

> それからちなみに、public classって2つ記述できないんではありませんでしたか?

javaではpublic宣言したクラス名とファイル名は一致していなければならないので、
1つのソースファイルにpublic classを複数記述することはできません。

この問題の場合、Draw.javaとTestDraw.javaに分けて記述します。
    • good
    • 0
この回答へのお礼

お早い回答ありがとうございます。

Drawであるdにvoidは代入できないということですね。

互換性の無い型、というやつでしょうか。

>javaではpublic宣言したクラス名とファイル名は一致していなければならないので、 1つのソースファイルにpublic classを複数記述することはできません。 この問題の場合、Draw.javaとTestDraw.javaに分けて記述します。


そうですよね!
問題文にはDrawクラスをこのように起動した、としか書いておらず、ちょっと説明不足のようなきがしました。

それと、別にpublicクラスでなくても良いような(たんにclassでもよいのでは?)気がしたのですが、いかがでしょうか?
(どちらのクラスとも)

お礼日時:2004/04/11 21:16

> それからちなみに、public classって2つ記述できないんではありませんでしたか?



Java言語仕様では、ソースコードがファイルとして保存される場合、publicクラスの名前と同じ名前のファイル名にしなければならないというような制限を設けてもよいということになっているだけですので、絶対にpublicなクラスを二つ以上記述できないというわけではないです。

ただほとんどの環境ではソースコードはファイルとして保存されるので、このような制限に従ってコンパイラが動作するのが当たり前ということになっています。

// まあ、こんなこと知らなくてもぜんぜん問題ないんですけどね。(^^;
// ちなみに、ファイルとして以外の方法でソースコードを保存する方法があるのかというと、私もよくわかっていません。
    • good
    • 0
この回答へのお礼

いつもありがとうございます。

でもpublic2つ記述してしまうとコンパイルエラーですよね・・・

言語仕様ではOKと言うことですね・・・

参考になりました。ありがとうございました

お礼日時:2004/04/12 22:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!