「自作クラスの型」にキャストする方法について。
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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- JavaScript 指定したパスが現URLに含まれていたら特定要素を削除するJavascriptのコードを教えてください 2 2023/04/27 17:58
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- JavaScript jsonテキストデータの並び替えができるサービスを教えてください 2 2022/08/05 20:16
- Excel(エクセル) Excel VBA 3 2023/04/22 10:46
- JavaScript JavaScript|特定URLだった時、特定の要素を変更するコードの書き方を教えてほしいです 2 2023/08/25 21:43
- その他(データベース) カラム上の重複を削除するクエリを教えてください 3 2022/04/12 14:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「天声人語」をインターネット...
-
VB.netのコンテナークラスとは...
-
A・B・Cクラスとは?
-
グローバルIPとプライベートIP...
-
配列の重複する値とその個数を...
-
C# テキストボックスにマウスが...
-
Eclipseでのクラス作成について
-
自作のクラスファイルがインポ...
-
容姿について
-
IPアドレスのクラスAを取得して...
-
IPアドレスの3バイト目の呼び方
-
EclipseでJSPのコンパイルエラー
-
どこからも呼ばれていない無意...
-
java eclipse 型に解決できません
-
同一パッケージにあるクラスが...
-
eclipse でクラスに色
-
ベクターワークスでの【クラス...
-
同じパッケージ、クラス名が含...
-
C#で OpenSSLで3DES
-
包丁の切れ味
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
java eclipse 型に解決できません
-
配列の重複する値とその個数を...
-
グローバルIPとプライベートIP...
-
「天声人語」をインターネット...
-
どこからも呼ばれていない無意...
-
同一パッケージにあるクラスが...
-
UMLのクラス図はmain()も含むん...
-
クラスのプロパティに構造体を...
-
main()を持つクラスが2つ以上...
-
包丁の切れ味
-
3年間同じクラスになる確率
-
IPアドレスのクラスAを取得して...
-
複数のクラスで共通した関数を...
-
dllと同じプロジェクトにする方法
-
自作のクラスファイルがインポ...
-
共通で使う関数を集めたクラス...
-
コンボボックスのマウスホイー...
-
進学校通ってたんですけど、眼...
-
重複エラーを解決するには
-
EclipseでJSPのコンパイルエラー
おすすめ情報