[解決済み] Javaにおけるダウンキャスティング
2022-02-16 12:27:24
質問
Javaではアップキャストは可能ですが、ダウンキャストはコンパイルエラーになります。
コンパイルエラーはキャストを追加することで取り除くことができますが、実行時にはいずれにせよ壊れます。
この場合、実行時に実行できないのに、なぜJavaはダウンキャストを許可しているのでしょうか?
この概念に実用的な使い道はあるのでしょうか?
public class demo {
public static void main(String a[]) {
B b = (B) new A(); // compiles with the cast,
// but runtime exception - java.lang.ClassCastException
}
}
class A {
public void draw() {
System.out.println("1");
}
public void draw1() {
System.out.println("2");
}
}
class B extends A {
public void draw() {
System.out.println("3");
}
public void draw2() {
System.out.println("4");
}
}
解決方法は?
ダウンキャストは、実行時に成功する可能性がある場合に許可されます。
Object o = getSomeObject(),
String s = (String) o; // this is allowed because o could reference a String
場合によっては、成功しないことがあります。
Object o = new Object();
String s = (String) o; // this will fail at runtime, because o doesn't reference a String
実行時にキャスト(この最後のキャストのような)が失敗すると
ClassCastException
が投げられます。
それ以外の場合は動作します。
Object o = "a String";
String s = (String) o; // this will work, since o references a String
一部のキャストはコンパイル時に禁止されることに注意してください。
Integer i = getSomeInteger();
String s = (String) i; // the compiler will not allow this, since i can never reference a String.
関連
-
[解決済み】Java、"変数名 "を変数に解決することができない
-
[解決済み】Eclipseで「パッケージエクスプローラー」ビューが見つからない
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】リンクリストの負の値の数でnegativeCntrを代入する
-
[解決済み】エラー「No enclosing instance of type Foo is accessible」の原因と修正方法について教えてください。
-
[解決済み】ResultSetの例外 - 結果セットの開始前
-
[解決済み】Javaで無限大を実装する方法とは?
-
[解決済み】Hibernateの例外「failed to lazily initialize a collection of role」の解決方法
-
[解決済み】Eclipseで「JUnitテストが見つかりませんでした。
-
[解決済み] [Solved] java.lang.NoClassDefFoundError: クラスXXXを初期化できませんでした。
-
[解決済み】javaで無効な文字定数
-
[解決済み】Eclipseで「パッケージエクスプローラー」ビューが見つからない
-
[解決済み】CreateProcess error=2, The system cannot find file specified.