当前位置: 代码迷 >> J2SE >> 子类覆盖父类方法有关问题 ,实在是糊涂了
  详细解决方案

子类覆盖父类方法有关问题 ,实在是糊涂了

热度:100   发布时间:2016-04-23 20:04:02.0
子类覆盖父类方法问题 ,实在是糊涂了
直接贴代码
父类:
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();
    }
  相关解决方案