zoukankan      html  css  js  c++  java
  • 笔试题

    public class Base
    {
        private String baseName = "base";
        public Base()
        {
            callName();
        }
     
        private void callName()
        {
            System. out. println(baseName);
        }
     
        static class Sub extends Base
        {
            private String baseName = "sub";
            public void callName()
            {
                System. out. println (baseName) ;
            }
        }
        public static void main(String[] args)
        {
            Base b = new Sub();
            b.callName();
        }
    }

    输出:

    base

    base

    谁能教教我,为什么这里输出的是base?虽然父类是私有方法,子类不能继承,但是,子类自己添加了一个callName方法。为什么不会去调用子类自己的callName方法呢?

    如果改成:

    public class Base
    {
        private String baseName = "base";
        public Base()
        {
            callName();
        }
     
        public void callName()
        {
            System. out. println(baseName);
        }
     
        static class Sub extends Base
        {
            private String baseName = "sub";
            public void callName()
            {
                System. out. println (baseName) ;
            }
        }
        public static void main(String[] args)
        {
            Base b = new Sub();
            b.callName();
        }
    }

    输出:

    null

    sub

    因为:父类构造器中调用了子类重写的callName方法。而此时,子类构造方法还没有执行,因此,baseName初始化为null。等子类构造器执行完后,则,调用子类重写的方法,所以,输出sub。

  • 相关阅读:
    Spring IoC容器实现
    Spring IoC简介及使用
    tomcat使用及原理
    tomcat的连接数与线程池
    tomcat配置文件server.xml
    java源码之Comparable和Comparator
    java源码之TreeSet
    25 二叉搜索树与双向链表
    24 复杂链表的复制
    条款04:确定对象被使用前已被初始化
  • 原文地址:https://www.cnblogs.com/lchzls/p/7252815.html
Copyright © 2011-2022 走看看