Which of the following are legal names for variables.(Mutiple) 1) _int 2) %large 3) $fred 4) Integer //Long、Double等包装器类似,都不是关键字 5) 2much | 134 |
public class Test8 { public static void main(String [] args){ Base b = new Subclass(); System.out.println(b.x); System.out.println(b.method()); } } class Base{ int x = 2; int method(){ return x; } } class Subclass extends Base{ int x = 3; int method(){ return x; } } | ☆多态性、虚拟方法调用
结果是 2 3 而不是 3 3 参看下面的几格解释 |
Employee e = new Manager(); e.department = " Finance " ; //department 是Manager的一个特殊属性// illegal 声明变量e后,你能访问的对象部分只是Employee的部分;Manager的特殊部分是隐藏的。这是因为编译器应意识到,e 是一个Employee,而不是一个Manager。但重写的方法除外 | ☆多态性、虚拟方法调用 |
在你接收父类的一个引用时,你可以通过使用instanceof运算符判定该对象实际上是你所要的子类,并可以用类型转换该引用的办法来恢复对象的全部功能。 为什么说“恢复对象的全部功能”,就是因为上一格所描述的,子类对象赋给父类句柄后,该句柄不能访问子类的那些特殊属性和方法,要用就要重新造型。 这其实是多态参数的后续应用,形成这样一个链条:传入多态参数——instanceof判断类型——casting——恢复功能 Marcus Mork Test 3 的57题大体体现了这个意思 | ☆多态性、虚拟方法调用 |
Employee e = new Manager(); e.getDetails(); 在此例中,Manager 重写了Employee的getDetail()方法。被执行的e.getDetails()方法来自对象的真实类型:Manager。事实上,执行了与变量的运行时类型(即,变量所引用的对象的类型)相关的行为,而不是与变量的编译时类型相关的行为。这是面向对象语言的一个重要特征。它也是多态性的一个特征,并通常被称作虚拟方法调用——“动态绑定” 上述两个例子表明,属性不能虚拟调用,而方法可以,因为属性不能重写,哈哈。 | ☆多态性、虚拟方法调用 |