I have a misunderstanding about typecasting in Java language. The problem is ClassCastException. For example, in this code, assuming Animal is the parent class of the Dog class,
Animal animal = new Animal();
Dog dog = (Dog) animal;
throws ClassCastException after execution. However, while studying android packages, I found an example about typecasting which should throw a ClassCastException, considering that java example.
EditText editText = (EditText) findViewById(R.id.edit_message);
In this code, findViewById method returns a View class object, which is one of the superclasses of EditText class.(from android.view.View to android.widget.EditText) The code runs fine. Could anyone explain if I made a mistake or how this happens?
Thanks in advance.
Once you create an object, you can't change its type. That's why you can't cast an Animal to a Dog.
However, if you create an object of a sub-class, you can keep a reference to it in a variable of the super-class type, and later you can cast it to the sub-class type.
This will work :
Animal a = new Dog ();
Dog d = (Dog) a;
In the Android example, you have a layout resource that looks like this :
<EditText
android:id="@+id/edit_message"
..."/>
This definition will cause Android to create an instance of EditText
, and therefore you can cast the view returned by findViewById
to EditText
. You can't cast it to anything else that isn't a super-type of EditText
.