Downcasting is when child class refers to the object of Parent class. I tried doing it without the instanceof operator.
class Food { }
class bread4 extends Foo
instanceof operator provides runtime type checking. For instance, if you had a class Food and two subtypes, Bread4 and Bread5, then:
static void method(Food a) {
Bread4 b = (Bread4) a;
System.out.println("Downcasting performed");
}
calling this method like:
Food four = new Bread4();
Food five = new Bread5();
Bread4.method(four); //the cast inside is done to Bread4, therefore this would work
Bread4.method(five); //the object of type Bread5 will be cast to Bread4 -> ClassCastException
To avoid this, you use the instanceof operator
static void method(Food a) {
if (a instanceof Bread4) {
Bread4 b = (Bread4) a;
System.out.println("Downcasting performed");
}
}
therefore, in case you call
Bread4.method(five)
the check return false so no ClassCastException occurs.
Hope this answers your question.
Here is how you can use the instanceof
operator:
static void method(Food a) {
if (a instanceof bread4) {
bread4 b = (bread4) a;
System.out.println("Downcasting performed");
}
}
The instanceof
operator takes an object on the left hand side and checks if it is an instance of the right hand side argument which is a class.
obj instanceof Claz
This returns true
if the class of obj
is an instance of Claz
.
On a side note, I also do highly recommend that you follow Java naming conventions. Instead of naming your class bread4
, name it Bread4
.
Classes should start with upper case letters whereas variables and methods should start with lower case letters.