直接贴代码
父类:
public class Super {
public Super(){
overrideMe();
}
public void overrideMe(){
System.out.println("父类Super方法");
}
}子类:
public class Sub extends Super{
private final Date date ;
Sub(){
date =new Date();
}
@Override
public void overrideMe() {
System.out.println(date);
}
public static void main(String[] args) {
Sub sub =new Sub();
sub.overrideMe();
}
}打印的结果是:
null
Tue Dec 30 15:16:32 CST 2014
对于第一次打印结果总是不明白,为什么不是打印 “父类Super方法”。
子类隐式的调用super(),进入父类构造方法中,执行overrideMe()方法,为什么不是执行父类的overrideMe()方法,而是调用子类的overrideMe() 方法????
------解决思路----------------------
你看看我这个顺序,也许对你有帮助。
package com.zq.test;
public class Super {
public Super(){
System.out.println("父类被构建");
overrideMe();
}
public void overrideMe(){
System.out.println("方法重写前");
System.out.println("父类Super方法");
}
}
package com.zq.test;
import java.util.Date;
public class Sub extends Super{
private final Date date ;
Sub(){
System.out.println("子类被构建");
date =new Date();
}
@Override
public void overrideMe() {
System.out.println("方法重写后");
System.out.println(date);
}
public static void main(String[] args) {
Sub sub =new Sub();
sub.overrideMe();
}
}
------解决思路----------------------
这不就是面向对象吗
你在父类里打印下当子类调用父类构造的时候 可以看到此时this的类型是子类sub
public Super(){
System.out.println(this.getClass().getName());
overrideMe();
}