在调用SubClass中的addAll()时,结果输出为"sub"。SuperClass中的addAll()调用的是super.addAll(),按我的理解尽管super.add()被重写,super.addAll()应该调用super.add(),而结果却不是这样。谁给解释一下?
以下示意性的代码:
class SuperClass {
    public add() {
        System.out.println("super");
    }    public addAll() {
        add();
    }
}class SubClass extends SuperClass {
    public add() {//overriding
        System.out.println("sub");
    }    public addAll() {//overriding
        super.addAll();
    }
}

解决方案 »

  1.   

    public addAll() {//overriding
            super.addAll();
        }
    这样只是说 调用父类的addAll 方法但是父类在调用这个addAll的时候会调用add 这个时候 因为多态 所以调用SubClass的add
      

  2.   

    public void addAll() {//overriding
            super.addAll();
            System.out.println(super.getClass());
            System.out.println(super.hashCode());
            System.out.println(this.hashCode());
        }你可以打印出super的实际是属于SubClass的对象的一个引用
    实际上super与this是同一个对象
      

  3.   

    System.out.println(super.getClass());//试了这个理解了,谢谢!