- PR -

superとthis

1
投稿者投稿内容
mays
常連さん
会議室デビュー日: 2004/01/17
投稿数: 22
投稿日時: 2004-10-14 17:51
お世話になっておりますmaysです。
現在Javaを勉強中なのですが、ちょっと解らない部分が出てきましたので
質問させていただきます。

以下のサイトを読んで勉強しております。
http://www.techscore.com/tech/Java/main.html
この中の「1.ウィンドウの作成」の「実習課題1」について
自分では、以下のようにコードを書いてみました。
ウィンドウを1つ表示させるというものです。

コード:
import javax.swing.*;
public class SampleFrame extends JFrame{
        SampleFrame(){
                this.setTitle("test");
                this.setSize(400,400);
                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                fileMenu.add(subMenu);
        }
        public static void main(String[] args) {
                SampleFrame frame = new SampleFrame();
                frame.setVisible(true);
        }
}



4行目〜6行目の部分が、解答例では以下のようにsuperを使っています。

コード:
        super("SampleFrame");
        super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        super.setSize(400, 400);



両方ともコンパイルが通り、実行したらウィンドウが1つ表示されました。
自分の解釈としては、JFrameを拡張したSampleFrame自身のタイトルや
サイズを決めているのでthisを使ったのですが、このような場合は
superとthisのどちらを使うものなのでしょうか。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-10-14 18:08
superを使うのは、自分のクラスではなく親クラスのメソッドを限定して呼び出したいときです。
挙げられている例だとsuperを指定する意味はないでしょう。

また、自分自身のメソッドを呼び出すときのthisの指定ですが、好みの問題でしょうが私は
省略します。
mays
常連さん
会議室デビュー日: 2004/01/17
投稿数: 22
投稿日時: 2004-10-14 18:26
丁寧な返信ありがとうございます。
自分の中で、もやもやしていたものがスッキリしました。

使い方としては
自分のクラスの中と、親クラスの中に同名のメソッドがある際に
・自分のクラス内のメソッドを使う場合:thisもしくは省略
・親クラスのメソッドを使う場合:super

という使い方だと理解しました。
ありがとうございました。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2004-10-14 22:38
unibon です。こんにちわ。

コンストラクタでの super、すなわち
コード:
public class SampleFrame extends JFrame{
    SampleFrame(){
        super("test");
    }
}


は、使うことは多いです。これは多用しても構わないでしょう(引数並びが違うコンストラクタがたくさんあって良いかどうかという問題は別にして)。
しかし、その一方で、super.setTitle("test") のような super は、めったなことでは使わないものです。このような super を使うか使わないかは、一線を画すと思います。普通のアプリケーションを書いている限りは、使わなくて良いのではないか、逆に言えば、使うようになっていたら相当の必然性があるはず(必然性があるべき)、と考えたほうがよいと思います。
mays
常連さん
会議室デビュー日: 2004/01/17
投稿数: 22
投稿日時: 2004-10-15 07:20
ありがとうございます。
まだ具体的な使い分け方が把握できてはいませんが

・コンストラクタでsuperを使うことは多い
・super.setTitle("test")的な使い方はめったにしない

という事を覚えておいて、これから勉強を進めて
実際の事例に出会った時に、実感できたらと思います。
1

スキルアップ/キャリアアップ(JOB@IT)