- PR -

同形式クラスのキャスト

投稿者投稿内容
Kira
ぬし
会議室デビュー日: 2004/10/30
投稿数: 252
投稿日時: 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 = "英語";
takamaro
大ベテラン
会議室デビュー日: 2004/10/12
投稿数: 100
投稿日時: 2005-03-10 22:08
意図が解かりません。
あやふやな理解の用語なら使わず、具体的に何をどうしたいのか、
一通りのソースコードと共に記述し再投稿した方が良いと思います。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2005-03-10 23:01
こういうことですか?
コード:
LABEL_J label;

if(****){
    label = new LABEL_E();
} else {
    label = new LABEL_J();
}


それにしても、変数を「コンストラクタ」と呼ぶなど基本的な部分を理解されていないよう
ですので、きちんと入門レベルの学習をしたほうがよいと思います。
Kira
ぬし
会議室デビュー日: 2004/10/30
投稿数: 252
投稿日時: 2005-03-10 23:13
ありがとうございます。
やりたかったことはukさんの返答のとおりのものです。

takamaroさん
ukさん
ご指摘有難うございました。
Java,勉強します。
Kira
ぬし
会議室デビュー日: 2004/10/30
投稿数: 252
投稿日時: 2005-03-11 22:21
ukさんもしよければ教えていただけないでしょうか。

本日ukさんのおっしゃるコードを実装してみたのですが、

if(****){
label = new LABEL_E();
} else {
label = new LABEL_J();
}

if条件の時もelse条件の時も
label.lang の値は"日本語"になってしまいます。
(else条件の場合は"English"となってほしいのですが。)
そのままコピーしたはずなのですが、なにかやりかたがまずかったのでしょうか。

ご解答、よろしくお願いいたします。


ピンクの恐竜
常連さん
会議室デビュー日: 2005/02/01
投稿数: 42
投稿日時: 2005-03-12 00:29
現状のソースを載せてみたらどうですか?
takamaro
大ベテラン
会議室デビュー日: 2004/10/12
投稿数: 100
投稿日時: 2005-03-12 01:26
引用:

金太郎さんの書き込み (2005-03-11 22:21) より:
ukさんもしよければ教えていただけないでしょうか。

本日ukさんのおっしゃるコードを実装してみたのですが、

if(****){
label = new LABEL_E();
} else {
label = new LABEL_J();
}

if条件の時もelse条件の時も
label.lang の値は"日本語"になってしまいます。
(else条件の場合は"English"となってほしいのですが。)
そのままコピーしたはずなのですが、なにかやりかたがまずかったのでしょうか。



ukさんではないですが答えさせて頂くと「そりゃ当たり前」という事です。
恐らくメソッドのオーバーライドと同様の動きを期待しているのでしょうが、
そもそも変数は「隠蔽」はされても「(俗に言う)オーバーライド」はしません。
もしどうしても同じ型(ここではLABEL_J)として処理を組みたいのならば、
直接変数を呼び出すのではなく、getter,setterメソッドを介して値を受け渡し
すべきですね(というか、それが基本です。Javaで直接インスタンス変数に対し
アクセスする事は特別な理由が無い限り流儀に反します)

ま、なにより基本ですから。この辺りの話は。
プログラムの対処をする前に、一度、ネット上ででも検索してメソッドと変数の
「上書き」の違いを整理してみてください。

Kira
ぬし
会議室デビュー日: 2004/10/30
投稿数: 252
投稿日時: 2005-03-12 08:49
takamaroさん>
解答ありがとうございます。

インスタンス変数が1個や2個だった場合アクセッサメソッドを使用してやればいいと思っていたのですが、LABELクラスには200個近くインスタンス変数を持たせたいと思っています。

そうするといちいちアクセッサメソッドを書くのは現実的ではないと思い、
このようなオーバーライドと同様の動きを期待するコードを書いてしまいました、、、。

もしよろしければなにかいい方法はないでしょうか。
アドバイスいただけないでしょうか。

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