public class ExampleClass {
public static void main(String[] args) {
// Upcasting from subclass to super class.
A aRef=new C();
//aRef.setMessage(); compilation Error
aRef.display();
B bRef = (B)aRef;
//bRef.setMessage(); compilation Error
bRef.display();
C cRef = (C)aRef;
cRef.setMessage("ayaz");
cRef.display();
}
}
interface A
{
void display();
}
class B implements A
{
public void display() {
System.out.println("Am in class B");
}
}
class C extends B
{
String msg = "Am in class C";
@Override
public void display() {
System.out.println(msg);
}
public void setMessage(String s){
msg = s;
}
}
В приведенной выше коде после того, как объект AREF понижающего приведения к объекту типа B не в состояние назвать setMessage(), хотя на вызов дисплея с НДТ Obj, способ отображения класса C называется. Когда мы опускаемся в Obj of C, тогда мы можем назвать, почему? это aRef, указывающий только на объект типа C, я думаю, что ссылка не копируется.вниз литья объекта и вызов метода
'тип переменной:' определить, как будут представлены и хранятся данные. 'тип объекта:' определять поведение объекта по методу, по существу, то, что можно выполнить с помощью определенного объекта. – YoungHobbit
Насколько я знаю, тип переменной определяет также набор методов, которые могут использоваться на ссылочном объекте –