美文网首页
当在父类构造数中调用子类重写过的方法时

当在父类构造数中调用子类重写过的方法时

作者: apollooo | 来源:发表于2018-05-26 00:02 被阅读0次

    当在父类构造数中调用子类重写过的方法时,到底会调用父类的方法呢还是子类的方法呢?

    public class Super {
        public Super(){
            this.m();
        }
        public void m(){}
    }
    
    public class Sub extends Super{
        private final Date date;
        Sub(){
            date=new Date();
        }
        @Override
        public void m(){
            System.out.println(date);
        }
        public  static void main(String[] a){
            Super s=new Sub();
            s.m();
        }
    }
    

    运行一下

    null
    Fri May 25 23:54:28 CST 2018
    
    Process finished with exit code 0
    

    可以看出输出了又两行。所以当子类实例化时调用父类的构造函数中含有子类重写过的方法时候依然会调用子类的方法而不会调用父类的方法。
    在这里第一行之所以打印NULL,是因为当调用父类构造函数时子类中的date对象并没有被实例化。

    代码出自《Effective Java》书的第69页,第80个例子。

    相关文章

      网友评论

          本文标题:当在父类构造数中调用子类重写过的方法时

          本文链接:https://www.haomeiwen.com/subject/yuspjftx.html