【发布时间】:2012-02-15 09:08:19
【问题描述】:
我有一个超类:
public class SuperClass {
public void dosomething() {
firstMethod();
secondMethod();
}
public void firstMethod() {
System.out.println("Super first method");
}
public void secondMethod() {
System.out.println("Super second method");
}
}
一个子类:
public class SubClass extends SuperClass {
public void dosomething() {
super.dosomething();
}
public void firstMethod() {
System.out.println("Sub first method");
}
public void secondMethod() {
System.out.println("Sub second method");
}
}
一个测试类:
public static void main(String[] args) {
SubClass sub = new SubClass();
sub.dosomething();
SuperClass sup = new SuperClass();
sup.dosomething()
}
当我运行测试方法时,我得到了这个:
Sub first method
Sub second method
你能告诉我这是怎么发生的吗?在子类dosomething方法中,我调用了super.dosomething(),我认为super方法会被调用,但是子类中的override方法被调用了。
如果我这样做:SuperClass superClass = new SuperClass();
superClass.dosomething();
结果是:
超级第一法
超秒法
区别在于方法调用的地方。我想肯定有什么我不知道的):
哎呀!第一个例子中的超级引用指向了子类...
像这样:
SuperClass sub = new SubClass();
sub.firstMethod();
sub.secondMethod();
【问题讨论】:
标签: java methods overriding