Java言語での型キャストについて誤解があります。問題は ClassCastException。たとえば、このコードでは、AnimalがDogクラスの親クラスであると想定して、
動物動物= new Animal();
犬犬=(犬)動物;
投げる ClassCastException 実行後。ただし、Androidパッケージを勉強しているときに、型キャストに関する例を見つけました。 ClassCastExceptionJavaの例。
EditText editText =(EditText)findViewById(R.id.edit_message);
このコードでは、 findViewById メソッドは 見る のスーパークラスの1つであるクラスオブジェクト EditText クラス。 Android.view.View に Android.widget.EditText)コードは正常に実行されます。私がミスを犯したかどうか、またはこれがどのように発生したかについて誰かが説明できますか?
前もって感謝します。
オブジェクトを作成すると、そのタイプを変更することはできません。そのため、動物を犬にキャストすることはできません。
ただし、サブクラスのオブジェクトを作成する場合は、スーパークラスタイプの変数にそのオブジェクトへの参照を保持し、後でサブクラスタイプにキャストできます。
これは動作します:
Animal a = new Dog ();
Dog d = (Dog) a;
Androidの例では、次のようなレイアウトリソースがあります。
<EditText
Android:id="@+id/edit_message"
..."/>
この定義により、AndroidはEditText
のインスタンスを作成するため、findViewById
から返されたビューをEditText
にキャストできます。 EditText
のスーパータイプではない他のものにキャストすることはできません。
基本的に、サブクラスのインスタンスはまだ不明であるため、スーパークラスのインスタンスをサブクラスにキャストすることはできません。アップキャスティングは、コードにポリモーフィズムを処理するため、この例外の発生を防ぐ確実な方法です。
最初にサブクラスをインスタンス化する必要があります。
Dog dog = new Dog;
スーパークラスにキャストすることで、親クラスである動物に見つからないクラスDogのメソッドを非表示にすることができます。
Animal animal = (Animal) dog;
次に、サブクラスのインスタンスがすでにわかっているため、これをサブクラスDogにダウンキャストできます。
Dog anotherDog = (Dog) animal;
あなたはこれを試すことができます:
Base obj= new Derived();
Derived obj2= (Derived)obj;
これがお役に立てば幸いです。
public class OverridingConcept {
public static void main(String[] args) {
// Up-Casting
Parent p = new Child();
Child c = (Child) p;
c.eat();
}
}
class Parent {
void show() {
System.out.println("Parent.Show");
}
void eat() {
System.out.println("Parent.Eat");
}
}
class Child extends Parent {
void show() {
System.out.println("Child.Show");
}
void sing() {
System.out.println("Child.Sing");
}
}