大家能举个例子吗?书上有句话是这样说的:
"理解是引用变量的类型--而不是引用对象的类型--决定了什么成员可以被访问.也就是说,当一个子类对象的引用被赋给一个超类引用变量时,你只能访问超类定义的对象的那一部分.这是为什么plainbox不能访问weight的原因,甚至是它引用了一个BoxWeight对象也不行."超类Box
子类BoxWeightBoxWeight weightbox = new BoxWeight();
Box plainbox = new Box();plainbox = weightbox;weight是子类BoxWeight的一个变量...
"理解是引用变量的类型--而不是引用对象的类型--决定了什么成员可以被访问.也就是说,当一个子类对象的引用被赋给一个超类引用变量时,你只能访问超类定义的对象的那一部分.这是为什么plainbox不能访问weight的原因,甚至是它引用了一个BoxWeight对象也不行."超类Box
子类BoxWeightBoxWeight weightbox = new BoxWeight();
Box plainbox = new Box();plainbox = weightbox;weight是子类BoxWeight的一个变量...
解决方案 »
- 怎样通过网页(类似php写的网页)向后台java程序提交数据
- finally块中的语句要是也抛出异常怎么处理呢
- 设计一个简单的GUI时,遇到的一个小问题,请高手帮帮忙,先谢谢了
- 鎬ワ紒锛侊紒jdk鐨刯ava銆俥xe闂
- want to get help for Button Event
- 基于遗传算法的自动组卷,谁能给我通俗讲解一下原理!
- 请大家给我看看这个程序问题在哪里?(原码—)
- 我的程序为什么出错,回答正确,马上揭帖!!!!!!!
- Developer studio什么意思?create new class 什么意思?
- 新人学java 请问File.separator报错是怎么回事?
- 请教线程通信程序问题
- 请教package的问题
1、plainbox的类型是Box(即上述的各“引用变量类型”,这是变量声明时定义的);
2、plainbox变量所指向的具体对象是BoxWeight类型的;(即上述的“引用对象类型”);
此时假设Box定义的成员有A、B;BoxWeight则包括继承而来的A、B以及自己定义的C。因为plainbox变量所指向的具体对象是BoxWeight类型的,所以实际上他有A、B、C三个成员。但是其中只有A、B可访问(因为plainbox的类型是Box,而对于Box类型来说公开可知的成员只有A、B,子类定义的C是不可知的),这就是所谓的“引用变量的类型(而不是引用对象的类型)决定了什么成员可以被访问”。
void Callme()
{
System.out.println("Inside A's Callme method");
}
}
class B extends A{
void Callme()
{
System.out.println("Inside B's Callme method");
}
}
class C extends A{
void Callme()
{
System.out.println("Inside C's Callme method");
}
}class Dispatch
{
public static void main(String[] args)
{
A a = new A();
B b = new B();
C c = new C();
A r; r = a;
r.callme();
r = b;
r.callme(); r = c;
r.callme();
}
}结果:
Inside A's callme method
Inside B's callme method
Inside C's callme method
第1个:
"当一个子类对象的引用被赋给一个超类引用变量时,你只能访问超类定义的对象的那一部分"第2个:
r = b;后,r.callme();显示子类b的方法callme()
1、当r = b;后,根据A类型定义你对r能访问的依然是callme()成员。
2、而此时的r所指向的对象虽然是B型的,其中callme()虽然重载了其超类方法,但编译器依然知道该对象里有一个名为callme的方法可以访问。假设该对象里还包括了其他的在子类中定义的成员方法,那么在此这些子类里定义的方法就不可用了。
3、你的程序里之所以对每各对象调用相同方法而得出了不同结果,其实就是因为对编译器而言,它只知道每个对象里都有一个名为callme的方法可以访问,至于具体每个对象里的callme()执行什么动作是在运行时动态绑定的,这也是多态的一个体现。