8、下面代码的结果是什么?
publicclassTestextendsBase{publicstaticvoidmain(String[] args){Base b = new Test();b.method();Test t = new Test();t.method();}@Overridepublicvoidmethod(){System.err.println("test");}}classBase{publicvoidmethod()throws InterruptedException {System.err.println("base");}}
解答:两次调用输出都是test。多态的情况下,尽管是父类的引用,调用方法时,还是调用子类的方法。
9、以下代码的结果是什么?
package test;publicclassTestextendsBase{publicstaticvoidmain(String[] args){new Test().method();}publicvoidmethod(){System.err.println(super.getClass().getName());System.err.println(this.getClass().getSuperclass().getName());}}classBase{}
解答:第一个输出test.Test、第二个输出test.Base。super很容易让人以为也是调用了父类,实际上还是本类。
10、true or false?
public classTest{public staticvoid main(String[] args) {String str1 = newString("abc");String str2 = newString("abc");System.err.println(str1.equals(str2));StringBuffer sb1 = newStringBuffer("abc");StringBuffer sb2 = newStringBuffer("abc");System.err.println(sb1.equals(sb2));}}