SJC-Pについて

このQ&Aのポイント
  • SJC-P取得のための勉強方法として、「サン技術者認定資格教則本Java2」という本を使っていますが、その本には間違いが多いという評価があります。
  • 本に載っている問題の中には、同じ名前と引数を持つメソッドがあった場合にオーバーロードされるという説明がありますが、これは間違っています。
  • 実際には、同じ名前と引数を持つメソッドはオーバーライドされます。また、クラスに継承を明示的に定義しない場合、コンパイラが自動的に「extends java.lang.Object」を追加する仕組みがあります。
回答を見る
  • ベストアンサー

SJC-Pについて

SJC-P取得のため勉強しています。何年か前に購入した「サン技術者認定資格教則本Java2」という本で勉強しているのですが、amazonのレビューを見てみると「間違いだらけ」と叩かれています。 で、その本に載っていた問題に疑問があります。次のうち正しいのはどちらかという問題です。 A同じ名前、引数をもつメソッドがあった場合、オーバーロードされる B継承を定義しない場合Objectクラスが親クラスとみなされる 正解はAとなっていましたが、これはBが正解ではないのでしょうか?同じ名前、引数をもつメソッドはオーバーライドですし、クラスに対して何も継承しない場合はコンパイラによって自動的にextends java.lang.Objectが追加されると思うのですが・・・

  • Java
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
回答No.1

Bで合っていますよ。 もし出版社のサイトがあったら見てみるといいと思います。 その本についての正誤表が載ってたりしますから。

tochanx
質問者

お礼

ありがとうございます。安心できました。

関連するQ&A

  • SJC-P の勉強

    Javaの開発に携わって1年余りの初心者ですが、 SJC-Pの取得を目指して勉強中です。 2つばかりお聞きしたいのですが、  ○インナークラスの使い所。  ○サブクラスのオブジェクトを   スーパクラスのオブジェクトで宣言する、   事の意味 について、具体的な例などお教え下さい。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • オーバーロードはオブジェクト指向プログラミングの枠組みで語られるべきか

    一部の書籍やサイトでは、オーバーロードがオブジェクト指向プログラミングの特徴であるかのような記述が見受けられるのですが、私はそれに疑問を感じます。 オーバーライドはクラス・継承に関わるためOOP特有のものであると思うのですが、オーバーロードはクラスとは全く切り離して考えられるからです。 確かにオーバーロードはクラスを作るときに有用な技術ではありますが、例えばC言語のような非オブジェクト指向言語でオーバーロードが使えたとしても、それなりに機能するはずです。 ひょっとしたら 「オーバーロードもオーバーライドもポリモーフィズムだろう」 ↓ 「ポリモーフィズムといえばオブジェクト指向」 のような話の展開でしょうか(いや、さすがに無理があるか…)。 皆様はどうお考えでしょうか。 ご意見お聞かせ下さい。

  • 継承・実装の関係で悩んでいます。

    継承・実装の関係について悩んでいます。 ここでは、アクセス制御を考えずに、インスタンスかstaticかabstract(ここではabstract final staticやabstract classのこと)の違いで、どう継承するのか考えています。 // 継承 はメソッドのオーバーライドのことを考えます。(オーバーロードは考えない) クラスAからクラスBでオーバーライドしたメソッドは、 クラスCでさらにオーバーライドできるのでしょうか? クラスCが クラスBのクラスAからオーバーライドしたメソッド をクラスBのメソッドとして見たときに、オーバーライドすることは可能なのでしょうか? クラスA │ インスタンスフィールドA │ staticフィールドA │ │ クラスA() { } │ │ インスタンスメソッドA () { } │ staticメソッドB() { } ↓ クラスB extends クラスA │ インスタンスフィールドA // 継承 │ インスタンスフィールドB │ staticフィールドB │ │ サブクラス1() { } // コンストラクタは継承しない、super()で呼び出す │ │ インスタンスメソッドA () { } // 継承 │ │ インスタンスメソッドB () { } │ staticメソッドB () { } ↓ クラスC extends クラスB implements インタフェースD, ... ↑ インスタンスフィールドA // クラスBのフィールドを継承 │ インスタンスフィールドB // クラスBのフィールドを継承 │ インスタンスフィールドC │ staticフィールドC │ │ サブクラス2() { } │ │ インスタンスメソッドA () { } // クラスBのメソッドを継承 │ インスタンスメソッドB () { } // クラスBのメソッドを継承 │ インスタンスメソッドD () { } // インタフェースDのメソッドを実装 │ インスタンスメソッドE () { } // インタフェースDのメソッドを実装 │ │ │ インスタンスメソッドC () { } │ staticメソッドC() { } │ interface インタフェースD extends インタフェースE ↑ │ staticフィールドD // public static final │ │ インスタンスメソッドD() { } // public abstract │ インスタンスメソッドE() { } // 継承 │ interface インタフェースE staticフィールドE // public static final インスタンスメソッドE() { } // public abstract

    • ベストアンサー
    • Java
  • 問題の解説お願いします。(オーバーロード&オーバーライド)

    class A{ protected int method1(int a , int b){ return 0; } } クラスAを継承したクラスで同時に定義できるメソッド が、 public int method1(int a,int b){return 0;} が良くて private int method1(int a,int b){return 0;} static protected int method1(int a,int b){return 0;} がだめな理由がいまいちわかりません。 法則みたいなものにこう書いてありました。 (オーバーロードについて) 同一クラス内に同一名称のメソッドを定義することができます。 ただし、それらは引数が異なるものでなければならず、 アクセス制御修飾子や戻り値の型だけが異なるメソッドは 定義することができません。 (オーバーライドについて) サブクラスでは、スーパークラスに存在するメソッドと同一引数・ 同一戻り値型を持つメソッドを定義することが許されています。 これら以外にも何か決まりがあるのでしょうか よろしくお願いします。

    • ベストアンサー
    • Java
  • メソッドのオーバーロードとオーバーライドのシグニチャはどうして違うの?

    オーバーロードのほうはメソッド名+引数の数+引数のデータ型ですが、オーバーライドのほうはそれに加えて戻り値の型も加わります。 どうして同じではいけないのでしょうか?

    • ベストアンサー
    • Java
  • オーバーロード、オーバーライド、コンストラクタについて

    オブジェクト指向と言われているオーバーロード、オーバーライドの違いを詳しく教えてください。また、コンストラクタがオーバーライドするってことはあるのでしょうか?? 一応、スーパークラス・サブクラスという言葉は知っています。

    • ベストアンサー
    • Java
  • どこまで覚えればいいの?SJC-WC試験

    こんばんは。 javaの資格ですが、こちらに質問させていただきました。 今度、お仕事で、webアプリを担当することになりました。 なので、お勉強もかねて、 SJC-WC(Sun Certified Web Component Developer)を受験しようと思っています。 (SJC-Pは以前に取得済みです) 学習書を買ってきて、すこし読んでみたのですが、 HttpServletRequest、HttpServletResponse、 さらにはServletに関するクラス、インターフェイス、メソッドがたくさん出てきて、 とまどっています。 もちろん全部覚えられればよいのですが、数が多すぎて、覚えきることが出来ません・・・。 これって、すべて覚えないといけないのでしょうか? それとも、学習書に出ているような代表的なものを覚えればよいのでしょうか? 練習問題を見ると、ときどき、「戻り値はなに?」という問題があります。 ってことは、メソッドのシグネチャまできちんと覚えないといけないのかな? と不安になっています・・・。 webアプリのことを学習するのが目的なんだし、 いちいち全部覚えるよりも、 シグネチャも代表的なメソッドだけ覚えればいいのかな、とも思っています。 細かく覚えなくても大丈夫なのか、どのように勉強されたのか、 受験された方の、ご意見やアドバイスを聞きたいです。 宜しくお願いします。

  • 継承について(長文です)

    いつもお世話になっています。現在、継承についての練習問題を解いているのですがわからないことがあるので質問させていただきます。 問題は、「自己紹介メソッド(抽象メソッド)を持つIntroduceクラスを作成し、そのクラスを継承してFistsNameクラス、FullNameクラス、IncludeAgeクラスを作成しなさい。三つのサブクラスのインスタンスを混合して配列に保持し自己紹介をしなさい」というものです。 それぞれのクラスはコマンドライン引数で名字(引数一つ)だけ、フルネーム(引数二つ)、フルネームと年齢(引数三つ)と3種類の引数を入力することによって適切なメソッドが呼び出されるということです。(わかりにくい文章ですいません。例えばヤマダと入力すればFirstNameクラスの自己紹介メソッドが呼び出されてヤマダと表示させたいのです)引数をサブクラスに渡さないと行けませんが、まずコンストラクタで引数をサブクラスに渡す場合は引数を一つ(もしくは二つ)しか指定しなかったときはフルネームとフルネーム+年齢のクラスでコンパイルエラー(ArrayIndexOutOfBoundsException)が出ます(これは理解することが出来ます)次にメソッドで渡す場合はシグネチャが異なるのでオーバーライドされずこちらもコンパイルエラーとなります。この他に引数をサブクラスに渡す方法はあるのでしょうか? わかりにくい文章になってしまいましたが、要するに三つのサブクラスをインスタンス化しその後、引数の個数により適切なサブクラスのメソッドが呼び出され引数を連結して表示させたいのです。このようなことは実現できないのでしょうか?if節によって引数の個数で場合分けなどをしないといけないのでしょうか?質問文がわかりにくければ補足させていただきます。よろしくお願いします。

    • ベストアンサー
    • Java
  • オブジェクト指向で分からないことが。

    オブジェクト指向で分からないことが。 1.クラスAから、文字列引数を指定して、クラスBがインスタンス化されたオブジェクトを取得する。 (getInstance的メソッド)引数の文字列にマッピングされたオブジェクトを取得する感じ。 2.1.で取得したオブジェクトから、各オブジェクトを取得するメソッドを呼び出し、オブジェクトを取得する。(仮にクラスC) 3.2.で取得したクラスCのメソッドを呼び出す。 このとき、クラスCのメソッド内で、1.で利用された引数を利用したいです。 そもそもクラスCは、1.を経てしか取得されないものの為、再度1.の引数を渡したくありません。 内部的な値なので、スコープpublicのセッターを用意して、クラスA内からの書き換えが出来ては困ります。 こういう場合、どういうクラス設計を行えば良いのでしょうか?

    • ベストアンサー
    • Java
  • 使いこなせてプログラムを作れれば、言葉は覚えなくても良いんじゃないの?

    皆さん、Javaでオーバーロードやオーバーライドや継承など、言葉は知ってっても意味はどういったものか覚えていますか?また、覚えていないと駄目なんですか? 僕は、名前は知っているが意味的なものは「大体こんな感じのものじゃなかった?」程度にしか覚えていません。 なぜなら言葉とその意味は覚えていなくても、使い方がわかっていれば良いと思うのです。 その使い方がオーバーライドだよ、とわかっていなくても、それを使いこなせていれば問題ないと思うのですが、皆さんはどう思いますか? それとも、やっぱり「オーバーロードとはこういった事で、オーバーライドとはこういった意味だよ」と 説明できるように覚えていないといけないものなんでしょうか? 説明が上手くできないのですが、 「~~このような使い方をオーバーライドと言います」と誰かがこう説明したとします。 その使い方をオーバーライドだと覚えていないといけないのですか? オーバーライドと言う事を知らなくても、その使い方がわかってれば良いと思うのですが。 i++ これは1づつプラスされますよね。その名前をインクリメントという事を知らなくても、その1づつプラスされると言う意味がわかっていれば良いと思うのですが。また前置、後置についても言葉知らなくても、意味がわかっていれば良いと思うのです。 そんな感じで、オーバーライドやオーバーロードやその他結構言葉が出てきますが、使いこなせれば、その事を●●と言うって事を知らなくても良いと思ういますが、皆さんどう思いますか?

    • ベストアンサー
    • Java

専門家に質問してみよう