- - PR -
同形式クラスのキャスト
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2005-03-10 21:03
LABEL_Jに日本語のラベルをまとめたクラスを
LABEL_Eに英語のラベルをまとめたクラスを 作成しました。 LABEL_Jからlabelというコンストラクタを作成して メインのIF文で条件にあった場合はlabelにlabel_Eの値を 入力したいと思っています。 しかし、思うようにうまくいきません。 どなたかご教授よろしくお願いします。 ---MAIN------------------------------- LABEL_J label = new LABEL_J(); if(****){ label = LABEL_E(label); } ====---------------------------------- public class LABEL_J{ public String lang = "日本語"; } public class LABEL_E extends LABEL_J{ public String lang = "英語"; | ||||
|
投稿日時: 2005-03-10 22:08
意図が解かりません。
あやふやな理解の用語なら使わず、具体的に何をどうしたいのか、 一通りのソースコードと共に記述し再投稿した方が良いと思います。 | ||||
|
投稿日時: 2005-03-10 23:01
こういうことですか?
それにしても、変数を「コンストラクタ」と呼ぶなど基本的な部分を理解されていないよう ですので、きちんと入門レベルの学習をしたほうがよいと思います。 | ||||
|
投稿日時: 2005-03-10 23:13
ありがとうございます。
やりたかったことはukさんの返答のとおりのものです。 takamaroさん ukさん ご指摘有難うございました。 Java,勉強します。 | ||||
|
投稿日時: 2005-03-11 22:21
ukさんもしよければ教えていただけないでしょうか。
本日ukさんのおっしゃるコードを実装してみたのですが、 if(****){ label = new LABEL_E(); } else { label = new LABEL_J(); } if条件の時もelse条件の時も label.lang の値は"日本語"になってしまいます。 (else条件の場合は"English"となってほしいのですが。) そのままコピーしたはずなのですが、なにかやりかたがまずかったのでしょうか。 ご解答、よろしくお願いいたします。 | ||||
|
投稿日時: 2005-03-12 00:29
現状のソースを載せてみたらどうですか?
| ||||
|
投稿日時: 2005-03-12 01:26
ukさんではないですが答えさせて頂くと「そりゃ当たり前」という事です。 恐らくメソッドのオーバーライドと同様の動きを期待しているのでしょうが、 そもそも変数は「隠蔽」はされても「(俗に言う)オーバーライド」はしません。 もしどうしても同じ型(ここではLABEL_J)として処理を組みたいのならば、 直接変数を呼び出すのではなく、getter,setterメソッドを介して値を受け渡し すべきですね(というか、それが基本です。Javaで直接インスタンス変数に対し アクセスする事は特別な理由が無い限り流儀に反します) ま、なにより基本ですから。この辺りの話は。 プログラムの対処をする前に、一度、ネット上ででも検索してメソッドと変数の 「上書き」の違いを整理してみてください。 | ||||
|
投稿日時: 2005-03-12 08:49
takamaroさん>
解答ありがとうございます。 インスタンス変数が1個や2個だった場合アクセッサメソッドを使用してやればいいと思っていたのですが、LABELクラスには200個近くインスタンス変数を持たせたいと思っています。 そうするといちいちアクセッサメソッドを書くのは現実的ではないと思い、 このようなオーバーライドと同様の動きを期待するコードを書いてしまいました、、、。 もしよろしければなにかいい方法はないでしょうか。 アドバイスいただけないでしょうか。 | ||||
