Object aThing = new Integer(25);
The method call aThing.intValue() is a compiler error. Why doesn’t polymorphism work in this case?
Also there’s a related statement in my textbook that is a bit convoluted:
The type of reference, not the type of the object referenced, determines that operations can be performed.
Can you briefly elaborate on that?
Where as Computer[] labComputers = new Computer[10]; works with polymorphism
public class Computer {
int ram;
public Computer(int rm){
ram= rm;
}
public String toString(){
String result = "ram is " + ram;
return result;
}
}
public class Notebook extends Computer{
int size;
public Notebook(int rm, int sz){
super(rm);
size = sz;
}
@Override
public String toString(){
String result = super.toString() + " size is " + size;
return result;
}
}
Added:
I believe somewhere in the middle, there would be
labComputer[1] = new Notebook(2,15);
labComputer[2] = new Computer(2);
For the method call labComputers[1].toString(), polymophism ensures that the correct toString is called. In my mind labComputer[1] = new Notebook(2,15); is equivalent to Object o = new Integer(25);. But polymorphism worked for my Computer example not in the Object-Integer example. Why?
It won’t work because your variable is from
Objectclass, so you can only use methods in theObjectclass. If you want to use it as anInteger, you should first do a (down) type casting:Now, why could maybe work? Because downcasting could throw a ClassCastException if the type casting won’t work.
Based in your example, I would post a basic code to show how polymophism works: