javaのソースにsuper(String);といった記述がありました。この処理によって文字列Stringはどのような変化をするのでしょうか。スーパークラスと関連はあるのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (3件)

> 以下の記述があった場合基底クラスはhogehogeでよいのでしょうか。


違います。hogehogeは扱っているクラスそのもの(何か用語があったかな?)です。
コード中では、thisというキーワードでインスタンスを参照することができます。
ご質問のコードには、実は基底クラスが書かれていないのですが、この場合、
基底クラスjava.lang.Objectの記述が省略されていると見なされます。

具体的に基底クラスを指定する場合は、例えば
class A extends B {
}
という記述をすると、BがAの基底クラス(AはBの導出クラス)となります。
class B の記述は、どこか別のところにあることになります。
    • good
    • 0
この回答へのお礼

わかりやすい説明をいただきありがとうございました。

お礼日時:2002/01/08 17:22

多分、"String"の部分は、ソースそのままの記述ではなく、nights03さんが、その引数がString型であるのを


見てこのように記述されたのだと思います。その前提で書きます。
superの意味は、a-kumaさんがおっしゃっているように、基底クラスのコンストラクタの呼び出しです。
コンストラクタのうち、String型の引数をとるものが呼び出されます。その処理の中で、その引数が
どのように使われるのかは、そのコンストラクタ次第ですが、仮に何か変化させた場合でも、それは
元の引数には反映されません。これは、一般的に参照型の引数について言えることではなく、String型の
特徴なのですが、String型は変化させることができず、必ず新しいインスタンスが作られるからです。
    • good
    • 0
この回答へのお礼

おっしゃる通りでコンストラクタ中に記述されていたものを勝手にString型の変数と思いこんでいました。ですが基底クラスがいまいち理解できていない為混乱しています。たとえば以下の記述があった場合基底クラスはhogehogeでよいのでしょうか。

public class hogehoge {
....
....
public hogehoge(String title){
super(title);
...
...

お礼日時:2002/01/08 11:17

それは、コンストラクタの中に記述があったはずです。



super(引数) は、基底クラスのコンストラクタを呼び出します。
引数がどうなるかは、その基底クラス次第なんですが、普通のクラスならば、
コンストラクタで、その引数に対して変化を与えるようなことはしないはずです。
    • good
    • 0
この回答へのお礼

おっしゃる通りコンストラクタ中に記述がありました。基底クラスの理解が足りないのでなにをしているのかがいまいち理解できませんが、、、

お礼日時:2002/01/08 11:20

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qあまのじゃくってどういう意味ですか?

あまのじゃくってどういう意味ですか?

Aベストアンサー

かっこつけたり、恥ずかしがったりして、自分の感情や思いをうまく表現できないこと。天邪鬼。

参考URL:http://ja.wikipedia.org/wiki/%E3%81%82%E3%81%BE%E3%81%AE%E3%81%98%E3%82%83%E3%81%8F

QString a = "a"; と String b = new String ("b"); の違い

String a = "a";
String b = new String ("b");

お伺いしたいのですが、
b は String のインスタンスを作ってると思いますが、
a はどんなことをしてるのでしょうか?

Aベストアンサー

お二人の回答を具体的に言うと、こういうことです。
String a1 = "a";
String a2 = "a";
String b1 = new String ("b");
String b2 = new String ("b");

a1のために、aという文字列のインスタンスが作られますが、
a2に代入されるのは、a1に使われたインスタンスが再利用されます。
これは、
if(a1 == a2) System.out.print("a1と同じインスタンス");
の結果でもわかります。

一方、b1とb2は、bという文字列オブジェクトを引数に、新しいインスタンスを生成する指示がありますので、b1とb2と、その初期化に使った無名のStringインスタンスの3つがメモリ上に存在することになります。
if(b1 != b2) System.out.print("b1とは違うインスタンス");
の結果でもわかると思います。

したがって、
String b = new String ("b"); というのは、Integerに例えると
Integer i = new Integer(new Integer(1)); という処理を
していることになり、ひとつ無駄なインスタンス生成となります。

お二人の回答を具体的に言うと、こういうことです。
String a1 = "a";
String a2 = "a";
String b1 = new String ("b");
String b2 = new String ("b");

a1のために、aという文字列のインスタンスが作られますが、
a2に代入されるのは、a1に使われたインスタンスが再利用されます。
これは、
if(a1 == a2) System.out.print("a1と同じインスタンス");
の結果でもわかります。

一方、b1とb2は、bという文字列オブジェクトを引数に、新しいインスタンスを生成する指示がありますので、b1とb2と、その...続きを読む

Qどういう意味だと思いますか?

彼とLINEしていると
「返事がおくれてごめん、あまのじゃくなもので・・・」と
返事がありました。

たわいもないことをLINEでやりとりしているのですが

あまのじゃくになるというのは・・・
回答に困って返事が遅れるという意味でしょうか?

Aベストアンサー

返事が早かったり遅かったり、気まぐれだということじゃないですか?

遅れてごめんと謝ってくるところが全くあまのじゃくだとは思いませんけどね。

QJAVAの質問です。 ( String args[] )それとも(String[] args) ?

MAINのこの引数ですが、
どちらが正しいのでしょうか?

また、そもそも この[]はなぜ必要なのでしょうか?
配列を意味していますか?

Aベストアンサー

mainに関してだけは (String[] args) が正しい・・・と思いましたが
( String args[] ) でコンパイルも実行も両方通ったのでどちらも正しいようです

配列を意味しています
例えば
String[] hai={"どちらも","正しい","とは","知らなかった"};
String hai[]={"どちらも","正しい","とは","知らなかった"};
ではどちらも配列を宣言した上でhai[0],hai[1],hai[2],hai[3]に文字列を代入しています。

String[] hai=new String[3];
String hai[]=new String[3];
で配列領域を確保してから
hai[0]="どちらも正しい";
のように代入してゆく方法もあります


main(String[] args) のString配列argsの中にはコマンドプロンプトでの実行時にプログラム名の後ろにスペースで分けて入力した文字列が[0]から順に代入されます

実行時に例えばHello.javaを実行するため

java Hello と入力して実行した時はargsには何も入っていませんが

java Hello nyuuryoku shita と入力して実行した時には

Hello.javaが実行された時mainメソッドの中で
args[0]には nyuuryoku が
args[1]には shita が代入された状態になっています

実行と同時に入力した値をプログラム内で使いたい時に用いる変数です

mainに関してだけは (String[] args) が正しい・・・と思いましたが
( String args[] ) でコンパイルも実行も両方通ったのでどちらも正しいようです

配列を意味しています
例えば
String[] hai={"どちらも","正しい","とは","知らなかった"};
String hai[]={"どちらも","正しい","とは","知らなかった"};
ではどちらも配列を宣言した上でhai[0],hai[1],hai[2],hai[3]に文字列を代入しています。

String[] hai=new String[3];
String hai[]=new String[3];
で配列領域を確保してから
hai[0]="どちらも正しい";...続きを読む

Q「あまのじゃく」に相当する英語は?

和英辞書を引いてみますと、色々な英語が出て来ます。
perverse or cussed person; contrarian とか。
それらの英語を逆引きすると、「つむじ曲がりの」とか「意固地な」とかの日本語になって、本来の日本語の意味の「あまのじゃく」に相当しません。

皆がこう言ったらいつも反対あるいは、別のことを言いたがる人。あるいは、何かが評判になったりして、多数の人がそこに殺到する時、その風潮に絶対に乗ろうとしない人。

私が捉えている「あまのじゃく」ですが、こんな性格の人は英米圏には殆んどいないから、それに相当する英語がないと言うことでしょうか?
もし、近い英語があれば教えて下さい。

宜しくお願いします。

Aベストアンサー

 yes-man, yes-sayer(はいはいと言うことを聞く人)の対義語、no-man, no-sayer(違う違うとごねる人)が近いだろうと思います。

QJavaソースコードをコンパイルするJavaプログラム

タイトルの通りですが、Javaソースコードをコンパイルし、実行するJavaプログラムを作りたいのですが、なにか有効な方法はありますでしょうか。
Runtime.getRuntime().exec( "javac Test.java" );
のようにすると、エラーになります。

なにか良い方法をご存知でしたら、よろしくお願いします。

Aベストアンサー

Javaのソースコードをコンパイルするのでしたら、Runtime.getRuntime().exec()を使ってもいいですけど、com.sun.tools.javacを使っては? これは、JDKのjavacコマンドが実行されるときに内部から呼び出されるコンパイルクラスです。

// 以下をimport
// import com.sun.tools.javac.*;

Main main = new Main();
String[] param = {"./Sample.java"};
main.compile(param);

例えばこんな具合にしてcom.sun.tools.javacのMainインスタンスを作成し、ファイルパスの配列を引数にしてcompileを呼び出してやります。わざわざexecで外部のタスクとして起動するより、こちらのほうがスマートかと。

Qあまのじゃくな男性

中学生男子に
あまのじゃくな人は結構いますか?

あと中学生男子は
普通に女子の肩に触れたりは
するもんですか?

回答お願いします(*´∇`*)

Aベストアンサー

中学生はあまのじゃくが多い年代でしょう。

女の子に対し興味が無いようなふりをしたり、悪態をついたり。

肩に触れるのはある程度親しいしるしだと思います。

QEclipseで新規クラスを作成時、スーパークラスをjava.lang.Object以外にするには?

最近Eclipseを使い始めましたが、パッケージエクスプローラがよくわかりません。

Javaプロジェクトを新規に作成し、
インポートを使って既存のjarファイルをそのプロジェクト内に配置しました。
その後、プロジェクトフォルダを右クリックし、
「ビルド・パス」-「ビルド・パスの構成」から
「ライブラリ」タブの「JARの追加」から先述のjarファイルを選択しました。

これでビルド・パスは通ったと思ったのですが、
新規クラスを作成する際にスーパークラスは「java.lang.Object」しか選択できず、
追加したJARにあるクラスが選択できません。

新規クラス作成時のウィザード画面で追加したJARにあるクラスを
選択するにはどうすればよいのでしょうか?
また、そもそもこのやり方でビルド・パスは通っているのでしょうか?

以上、よろしくお願いします。

Aベストアンサー

プロジェクトのプロパティウインドウを呼び出し、Javaのビルド・パスの「ライブラリ」に、追加したJarが入っていますか? 入っていれば、それで設定はOKのはずです。

ちなみに、java.lang.Objectしか出てこない、というのは、どうやったのでしょうか。新規クラス作成のウィザードで、スーパークラスの選択ダイアログを開いて設定をしたのでしょうか。ここは、初期状態ではjava.lang.Objectと入力されています。これに一致するものしか表示されませんから、当然ですがObjectしか表示はされません。

書かれているjava.lang.Objectを消して、パッケージ名の最初の1文字をタイプすると、それに一致する項目がずらっと現れるはずです。(何もタイプされていない状態だと何も表示されません。必ず、パッケージ名の最初の文字をタイプする必要があります)

Qあまのじゃく・・・

なんとなく、あまのじゃくな性格です。
この性格ってどうしてこうなるの?
解決する方法とかありますか?

Aベストアンサー

同じくあまのじゃくです(笑)
#1さんのおっしゃること、確かに当たってるような気が・・・。
私は最近は、思わず言い返してしまっても
後で家に帰ってから反省をするようにしています(笑)
あまり役に立つか分かりませんが
参考程度に読んでおいていただけるとありがたいです。

Qimportするには java.io.*; import org.apache.log4j.*;

EclipseでJavaの開発をしています。
import java.io.*;
import org.apache.log4j.*;
がエラーになります。
多分ライブラリーに入れる必要があるのだと思いますが、その方法について
教えて下さい。宜しくお願い致します。

Aベストアンサー

プロジェクトフォルダを右クリック→「ビルド・パス」→「ビルド・パスの構成」
あるいはプロジェクトフォルダを右クリック→「プロパティ」→「Javaのビルド・パス」

で、ライブラリがプロジェクトフォルダ配下に存在しているなら「Jarの追加」
プロジェクトフォルダ以外の場所にあるなら「外部Jarの追加」で追加できます。

ちなみにjava.ioはJ2SEに含まれているので(「JREシステムライブラリ」があるはずなので)
追加しなくても良いです。


人気Q&Aランキング

おすすめ情報