
あるテキストの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つ記述できないんではありませんでしたか?
No.1ベストアンサー
- 回答日時:
> (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に分けて記述します。
お早い回答ありがとうございます。
Drawであるdにvoidは代入できないということですね。
互換性の無い型、というやつでしょうか。
>javaではpublic宣言したクラス名とファイル名は一致していなければならないので、 1つのソースファイルにpublic classを複数記述することはできません。 この問題の場合、Draw.javaとTestDraw.javaに分けて記述します。
そうですよね!
問題文にはDrawクラスをこのように起動した、としか書いておらず、ちょっと説明不足のようなきがしました。
それと、別にpublicクラスでなくても良いような(たんにclassでもよいのでは?)気がしたのですが、いかがでしょうか?
(どちらのクラスとも)
No.2
- 回答日時:
> それからちなみに、public classって2つ記述できないんではありませんでしたか?
Java言語仕様では、ソースコードがファイルとして保存される場合、publicクラスの名前と同じ名前のファイル名にしなければならないというような制限を設けてもよいということになっているだけですので、絶対にpublicなクラスを二つ以上記述できないというわけではないです。
ただほとんどの環境ではソースコードはファイルとして保存されるので、このような制限に従ってコンパイラが動作するのが当たり前ということになっています。
// まあ、こんなこと知らなくてもぜんぜん問題ないんですけどね。(^^;
// ちなみに、ファイルとして以外の方法でソースコードを保存する方法があるのかというと、私もよくわかっていません。
いつもありがとうございます。
でもpublic2つ記述してしまうとコンパイルエラーですよね・・・
言語仕様ではOKと言うことですね・・・
参考になりました。ありがとうございました
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.netでメソッドからコントロ...
-
エクセルVBA 画像を貼り付ける...
-
サーブレットコンテキストの意...
-
Javaでブラウザ判定
-
VBAでの[]
-
エクセルVBAで、条件に一致する...
-
変数名の付け方
-
(vba)他のアプリケーションの右...
-
複数の変数を宣言する時、同時...
-
PHPExcel使用で2枚目のシートを...
-
vb.netでFAXを送信する方法
-
オブジェクトレベルとメタレベル
-
恋愛
-
VBAもしくはVB6:クラスの中で...
-
SwingとEDT(イベントディスパッ...
-
標準モジュールとクラスモジュ...
-
コマンドプロンプト実行後に画...
-
僕の出身中学校は200人同級生が...
-
ODBCでMoveNextがうまく動作し...
-
重複エラーを解決するには
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
servletからjspへオブジェクト...
-
サーブレットコンテキストの意...
-
エクセルVBA 画像を貼り付ける...
-
Excel VBA 定数にオブジェクト...
-
VB.netでメソッドからコントロ...
-
VBAでの[]
-
System.Collections.SortedList
-
JSPでのArrayListの表示につい...
-
C#で親にイベントを投げる方法
-
C#のクラスで値渡しをする
-
VB.NETでのnothing の意義について
-
Vba ListViewの行挿入に関して...
-
String型からlong型への変換は...
-
javaで、、、
-
MessageBox.Show(Me,…の「Me」...
-
getParameter()について
-
ピクチャーボックスに点を打つ...
-
VB2005でADDとINSERTの違いは?
-
singletonクラスとは???
-
LiveConnectって?
おすすめ情報