A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© tujiu888 中级黑马   /  2016-1-21 17:41  /  410 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Test {
        public static void main(String[] args) {
                Test t = new A();
                t.xx();
                t.bb();
               
        }
        private void xx() {
                System.out.println("Hello!");
        }
        void bb() {
                System.out.println("22222222222222222");
        }
       
}


class A extends Test {
        void xx() {
                System.out.println("1112222");
                System.out.println("Hello World!");
        }
        void bb() {
                System.out.println("11111111111111");
        }
}
这种情况下执行为何看的是右边, 不是编译看左边,执行看右边! 如果私有,那么编译应该是报错的,为何也没有报错

3 个回复

倒序浏览
A是Test的子类,其中 void bb() 是重写父类的方法,void xx()A类的特有方法,因为父类的 void xx() 方法是私有的,不可以重写。Test t = new A();是多态,编译看左边,父类既有xx方法又有bb方法,所以不会报错,子类也是具有这两个方法,所以运行的时候都是运行的子类的这两个方法。
回复 使用道具 举报
1楼正解学会了,最重要分析好classA中的voidxx()方法
回复 使用道具 举报
顺便也学习了  ~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马