In Java, an Object can have a runtime type (which is what it was created as) and a casted type (the type you have casted it to be).
I\'m wondering what
Section 15.5. Expressions and Run-Time Checks differentiates between
For example,
If the type of an expression is a reference type, then the class of the referenced object, or even whether the value is a reference to an object rather than null, is not necessarily known at compile time. There are a few places in the Java programming language where the actual class of a referenced object affects program execution in a manner that cannot be deduced from the type of the expression...
[snip]
An expression whose type is a reference type may be tested using
instanceofto find out whether the class of the object referenced by the run-time value of the expression
Hence, applying the above language to
A a = new B();
we might say something like
The static type of the expression
aisA, despite the fact the value stored inais a reference to the object of runtime classB.
Personally, I interpret the two concepts in the following manner (but beware I am unsure of its correctness):