• ベストアンサー

superの使い方

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

  • Java
  • 回答数3
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
  • ranx
  • ベストアンサー率24% (357/1463)
回答No.3

> 以下の記述があった場合基底クラスはhogehogeでよいのでしょうか。 違います。hogehogeは扱っているクラスそのもの(何か用語があったかな?)です。 コード中では、thisというキーワードでインスタンスを参照することができます。 ご質問のコードには、実は基底クラスが書かれていないのですが、この場合、 基底クラスjava.lang.Objectの記述が省略されていると見なされます。 具体的に基底クラスを指定する場合は、例えば class A extends B { } という記述をすると、BがAの基底クラス(AはBの導出クラス)となります。 class B の記述は、どこか別のところにあることになります。

nights03
質問者

お礼

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

その他の回答 (2)

  • ranx
  • ベストアンサー率24% (357/1463)
回答No.2

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

nights03
質問者

お礼

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

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

それは、コンストラクタの中に記述があったはずです。 super(引数) は、基底クラスのコンストラクタを呼び出します。 引数がどうなるかは、その基底クラス次第なんですが、普通のクラスならば、 コンストラクタで、その引数に対して変化を与えるようなことはしないはずです。

nights03
質問者

お礼

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

関連するQ&A

  • スーパークラスのコンストラクタの処理を引き継ぐ

    基本情報18年秋のJava問題問12の設問1(a)の問でわからないことがあるので教えてください。 スーパークラスを継承したクラスのコンストラクタ内の処理を、スーパークラスのコンストラクタと同じ処理する場合の記述についてです。 問題と解答(http://www.jitec.jp/1_04hanni_sukiru/mondai_kaitou.html#18aki)はここですが、簡単に書くと、次のようになります。 抽象クラスBook abstract class Book { String name; String id; Book(String name, String id) { this.name = name; this.id = id; } ~ } Bookを継承したRegularBook class RegularBook extends Book { RegularBook(String name, String id) { ここが穴埋め ; } ~ } 穴埋めの解答群5つのうちの2つが次のとおりです。 エ super(name, id) オ this.name = name; this.id = id もちろんエが正解です。 普通ここにエの記述をするのはわかるのですが、なぜ「オ」が「絶対に間違い」と言い切れるのかが分からないのです。 スーパークラスのコンストラクタ内の処理が変更になった場合、それを継承するクラスのコンストラクタの処理にも反映されるとか、そういう意味でもエの書き方は便利だとは思いますが、オも絶対に間違いといいきれないのでは?? お尋ねしたいのは、情報処理試験の問題として、絶対に間違いでない選択肢を2つ以上もいれるはずもないので、オは「なにがなんでも間違い」なんだろうけれどもその理由が分からないのです。 オが確実に間違っているという理由が分かりましたら教えてください。よろしくおねがいいたします。

  • javaでEUC-JP文字列→UTF-8への変換

    DB内にEUC-JPで保存されているデータを取得して、これをUTF-8文字列として扱いたいです。 phpでいうところの$string = mb_convert_encoding($string, "UTF-8", "EUC-JP"); をjavaで実現したいです。 どのように記述すれば変換できるのでしょうか? 検索しても、数十行もコードを書いて実現しているものばかりで、 シンプルな方法が見つかりません。 javaには難しい処理なのでしょうか…

  • コンストラクタの super() で処理が止まります。

    いつもお世話になってます。 eclipse & Visual Editor にて開発しております。 JFrame を継承したクラスを作成したのですが コンストラクタにて super() を呼び出したときに 処理が止まる?ようになってしまいます。 NoSuchMethodException(Throwable).<init>(String)行: 195 上記、タブが追加されて、 ----- ソースが見つかりませんでした。 ソース・ルックアップ・パスの編集 ← ボタン ----- が表示されている状態です。 解決策が分かりません。 どの辺りから調べれば良いのでしょうか?

    • ベストアンサー
    • Java
  • Javaの文字列の大小比較についてです。

    Javaでは、文字列の大小比較をする時、StringのcompareToを使用しまが… compareToの中の処理は一旦char型に直して、それを比較しているのでしょうか? また、compareToを使用せずに、プログラム内に自分で書いた場合、処理速度は変化ありますか?

    • ベストアンサー
    • Java
  • JAVAでSJISのコード変換

    JAVAで、UnicodeからSJISへのコード変換を行った上で ファイル出力を行いたいです。 たとえば文字列中にある「(1)」の文字コードが以下である時 ------------------------------- SJIS:8744 - UNICODE:2464 ------------------------------- 2464のコードを8744に変換した上でファイル出力したいです。 処理として、以下の様な形を考えているのですが 文字化けしてしまします。 ------------------------------- String source = "(1)あああああ"; 文字列の数分ループ処理↓ int code = (int) (source[x].charAt(i)); if (code == 2464) { strBuff.append(String.valueOf((char) (8744))); } ------------------------------- Unicodeで扱われているので「getByte("SJIS")」などとしているのですが 同様の結果となります。 何か良い手はないものでしょうか?

    • ベストアンサー
    • Java
  • JavaのStringクラスに「外字」という概念はある?

     今、客先のデータをJavaで処理しようとしているのですが、そのデータ(Shift-JISの文字列データ)には、今まで使われてきた「外字」が含まれています。  私の知っている範囲では、Shift-JISの文字列でも、Javaで読み込んだら内部的にUnicodeに変換されるのではないかと思っているのですが(←間違っているかもしれません)、そのUnicode変換の際に外字の部分はどうなってしまうのでしょうか。また、Unicodeに変換された文字列を、出力の際にまたShift-JISに戻すことになると思うのですが、そのときにはちゃんと以前の外字コードに戻ってくれることが保証されているのでしょうか。  JavaのリファレンスでStringクラスのページで「外字」という文字列で検索してみたのですが、まったくひっかからなかったので不安になっています。  よろしくお願い致します。

    • ベストアンサー
    • Java
  • 文字列の操作について教えて下さい。

    Javaで文字列の操作をしたいと考えています。 String str1 = "あいうえおかきく"; String str2 = "あいうえお"; 上記のようなstr1、str2という文字列があるとします。 str1は、str2と同様の文字列を先頭から含んでいます。 str2と同じ文字を省き、それ以降の文字列を取り出して、 String str3 = "かきく"; という文字列を取り出す処理を行いたい、と考えています。 一般的には、どのようなロジックを組むのかと思い質問させて頂きました。 みなさんなら、どのようなプログラムか教えてください。 よろしくお願い致します。m(_ _)m

  • StringBufferクラスについて

    コマンドライン引数で入力された文字列が  3文字以下なら、その文字列を20個、文字列連結して表示し、  4文字以上なら"たくさん"を表示しなさい ・文字列連結の際はStringBufferクラスを使用しなさい ・for分を使用しなさい *Javaのインデックス・配列はゼロからです という問いがあった場合ソースはどのように記述すればいいのでしょうか? なにぶん初心者なもので・・・。 どなたか親切な方、教えてもらえないでしょうか?

    • ベストアンサー
    • Java
  • Javaを使って、string型の年月日に日を加算するにはどの様にした

    Javaを使って、string型の年月日に日を加算するにはどの様にしたら一番簡単でしょうか。 例えば、20100831 という文字列に+3日を加えたら20100903というstringの値が返るようにしたいのです。 string型からSimpledateFormatで日付にして、calendarクラスで加算して、戻して・・・というなんか面倒くさい方法しか思いつきません。 皆様の知恵をお貸しください。

    • ベストアンサー
    • Java
  • Javaの公式メソッドの中身を見るには?

    Javaの公式なメソッドやクラスの中身を見るにはどうすればいいでしょうか? jTextAreaクラスに、指定した位置に文字列を挿入する、 「insertメソッド」というメソッドがあるのですが、 このメソッドがどういうアルゴリズムかを勉強したいのですが、 JavaのAPIを見ても、引数や説明があるだけで、中のソースがありません。 http://java.sun.com/javase/ja/6/docs/ja/api/javax/swing/JTextArea.html#insert%28java.lang.String,%20int%29 何か中身を見る方法ありませんか?

    • ベストアンサー
    • Java

専門家に質問してみよう