アカウント名:
パスワード:
普通は super() はどこか一箇所(普通は最もパラメタの多いやつ)で呼ぶような気が。 # 趣味の問題だろうか…。this()を使うほうがコード重複が減ると思うんだけど。
今ひとつ言いたいことが伝わらなかったようなので もう少し詳しく書きます。これでもあまりいい例ではないですが。 たとえば、java.util.Hashtable を継承して、 キーが存在しなかった場合に指定したデフォルト値を返す get メソッド Object get(Object key, Object defaultValue) を追加したいとします。 Hashtable には(JDK1.2以降なら)4つのコンストラクタがあり
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
ソースを見ろ -- ある4桁UID
んーと.... (スコア:0)
通常こっちが何も指定しないと、 super() をコンパイラが勝手に
入れてくれるってことだった筈だけど、これって継承って言うんだっけ?
みたいなもんって言えばそれもそーか。
でも実際のところ、正式にはどーなんでしょ?
継承じゃなかった気がするぞ。
# なんか、非常にどーでもいいことのよーな気もする
# でも、よくないよーな気もする
Re:んーと.... (スコア:0)
親クラスのコンストラクタが自動で呼ばれます。
しかし、書いてしまうと自動では呼ばれなくなる
仕様だったと思います。
#未確認
Re:んーと.... (スコア:1)
コンストラクタを1つも作らない場合、
public Foo() { super(); }
というコンストラクタが自動的に作られます。
"Quidquid latine dictum sit, altum videtur."
Re:んーと.... (スコア:0)
コンパイラが super() を入れるので何も指定しなくてよいのですが。
以下のように親クラスで引数の違うコンストラクタがたくさん定義されていて、
class A {
public A() {}
public A(int x) {}
public A(int x, int y) {}
public A(int x, int y, int z) {}
}
これらを子クラスでも使えるようにしようとすると
以下のようにする必要があり、これがすごく面倒なのです。
class B extends A {
public B() { super(); }
public B(int x) { super(x); }
public B(int
Re:んーと.... (スコア:1)
> public B() { super(); }
> public B(int x) { super(x); }
> public B(int x, int y) { super(x, y); }
> public A(int x, int y, int z) { super(x, y, z); }
> }
>
> これが自動的に生成されるならとても楽チンだと思います。
こんなことされたらまっとうなプログラマなら迷惑と思う…。
普通は super() はどこか一箇所(普通は最もパラメタの多いやつ)で呼ぶような気が。
# 趣味の問題だろうか…。this()を使うほうがコード重複が減ると思うんだけど。
Re:んーと.... (スコア:0)
今ひとつ言いたいことが伝わらなかったようなので
もう少し詳しく書きます。これでもあまりいい例ではないですが。
たとえば、java.util.Hashtable を継承して、
キーが存在しなかった場合に指定したデフォルト値を返す get メソッド
Object get(Object key, Object defaultValue) を追加したいとします。
Hashtable には(JDK1.2以降なら)4つのコンストラクタがあり