
「自作クラスの型」にキャストする方法について。
Java初心者ですが、よろしくお願いします。
class AAA
class BBB
※クラスAAAはクラスBBBのスーパークラス(直属のスーパークラスとは限らない)とします。
class CCC
という3つのクラスがあるとして、
この場合、
class CCC{
AAA var;
BBB bbb;
void test(){
bbb = new BBB();
var = (AAA)bbb; //---★
}
}
というような、キャストは可能ですよね?(←確認1)
次に(確認1に問題が無い場合)、
クラスAAAとクラスBBBの格納場所(パッケージ関連の話です)について、
AAAとBBBがどういう位置関係にあるときに、上記のキャストは可能になるのでしょうか?
AAAとBBBが同一パッケージ内にある時だけでしょうか?(←確認2[質問の核])
で、さらに、
上記の「---★」の所で、
AAAクラスにキャストする処理をしていますが、
この時、AAAクラスのコンストラクタは呼ばれるのでしょうか?
(AAAをnewしていないけれど、キャスト処理でnewしたのと同じことになったりしますか?)
また、これと同様の質問になりますが、
仮に、クラスAAAの設計が、クラスAAAのインスタンスが生成された場合に、
何らかのコールバック処理が行われるような設計の場合、
この (AAA)bbb というキャストによって、想定しているコールバック処理
は行われたりしますでしょうか?(←確認3)
初心者らしからぬ質問かもしれませんが、
どなたか、どうか分かりやすく教えて下さい。
No.2ベストアンサー
- 回答日時:
> bbb = new BBB();
> var = (AAA)bbb; //---★
> というような、キャストは可能ですよね?(←確認1)
わざわざ書かなくともキャスト無しで var = bbb; と代入できます。下の例も見てください。
var = new BBB(); //キャスト不要
bbb = (BBB)var; //キャスト必須
ANo.1の方が書いているとおり、簡単に試してみることができる内容ばかりなのであとは自力で確認してみてください。
回答ありがとうございます。
NO.1のお礼の中でも書かせて頂いた通り、
テストプログラムを書いて検証しているところなのですが、
「確認3」の所は、(AAA)とキャストしたからと言って、
AAAがnewされるわけではなさそう、ということが分かってきました。
また、「確認1」は、書籍などから、おおかた正しいであろうと思っておりまして、
これも念のためテストプログラムにて検証し、問題なさそうだと分かってきました。
salsberryさんから頂いた回答も、大変勉強になりました。
で、問題の「確認2」ですが、
パッケージの異なるソースファイルの「コンパイル、実行」のあたりで、
つまづいていて、検証できずにおります。
ということで、こちらの問題をまず解決してきます!
No.3
- 回答日時:
ま~確かに「試せばわかる」かもしれないけど, 究極的に「言語仕様としてそうなっている」のか, それとも「その処理系ではそうなっているけど言語としては保証されていない」のかは区別つかないんではないかな>#1.
Java の言語仕様って, (そうである「はず」のものは) 本屋にいけば見付かりますよね.
回答ありがとうございます。
まだ私には難しい内容でしたが、なんとなく言わんとすることは分かります。
テストプログラムを的確に書ける方ですと、
そのあたりの高度な疑念が湧きそうですね。
初心者である私の場合、
まずは、自分の書いたテストプログラムが怪しい(笑)ので、
「このコードで、とりこぼしなく検証できているんだろうか」という疑念に
しばしば悩まされます。
今はパッケージの異なる2~3のファイル(AAA、BBB、CCC)の
コンパイル、実行あたりでつまずいております。(苦笑)
がんばります!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EclipseでJSPのコンパイルエラー
-
dllと同じプロジェクトにする方法
-
共通で使う関数を集めたクラス...
-
複数のクラスで共通した関数を...
-
重複エラーを解決するには
-
3年間同じクラスになる確率
-
VBAもしくはVB6:クラスの中で...
-
コンボボックスのマウスホイー...
-
ATLとMFCの違いは何でしょうか?
-
エクセルVBAでのwitheventsにつ...
-
恋愛
-
配列の重複する値とその個数を...
-
そんなにお金がなくても年に1度...
-
どこからも呼ばれていない無意...
-
UMLのクラス図はmain()も含むん...
-
packageとimport の違いって?
-
標準モジュールとクラスモジュ...
-
同じクラスにならない確率を教...
-
ネスカフェ エクセラ と UCCク...
-
eclipse でクラスに色
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
僕の出身中学校は200人同級生が...
-
今日は こどもの日 で、良い天...
-
どこからも呼ばれていない無意...
-
そんなにお金がなくても年に1度...
-
中学生です。 私は教室の黒板に...
-
恋愛
-
EclipseでJSPのコンパイルエラー
-
java eclipse 型に解決できません
-
共通で使う関数を集めたクラス...
-
main()を持つクラスが2つ以上...
-
同一パッケージにあるクラスが...
-
配列の重複する値とその個数を...
-
「隣の芝生は青く見える」現象...
-
重複エラーを解決するには
-
UMLのクラス図はmain()も含むん...
-
複数のクラスで共通した関数を...
-
VBAもしくはVB6:クラスの中で...
-
命名規約は連番でいいのか?
-
eclipse でクラスに色
-
3年間同じクラスになる確率
おすすめ情報