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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© che201311 中级黑马   /  2013-11-23 16:12  /  1051 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


class A{
    public   int i=1;
    A(){
        System.out.println ("A is created and i="+i);
        }
    }
class B extends A{
        B(){
                System.out.println ("B is created and i="+i);
                }
        void printI(){
        i++;
        System.out.println ("i="+this.i+" "+super.i);
        }
}


新建一个B的对象,然后调用printI()
输出结果
Java code

?
1
2
3
A is created and i=1
B is created and i=1
i=2 2

4 个回复

倒序浏览
不明白i值的变化?
回复 使用道具 举报
在子类的构造函数中,默认的有一句代码是调用父类的构造函数,而且是在第一行,所以先打印了一句
A is created and i=1
然后再执行子类构造函数中相应的代码,就打印出
B is created and i=1
然后调用了printI()方法,子类继承了父类中得i,所以打印了i=2,之所以后面的那个值是2而不是1,实际上是还是子类的i的值,要想要得到父类中i的值,可以在这个方法中建立父类的对象。通过父类对象来使用父类的i的值。

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
当人new B的时候它会先调用父类的无参构造方法

评分

参与人数 1黑马币 +3 收起 理由
FFF + 3 一句话的回答,是没有分的~

查看全部评分

回复 使用道具 举报
B b=new B()
由于你没重新定义i 所以A B中的i都是同一个
首先会运行A的构造函数然后运行B的构造函数
所以结果会是  
1
1
然后i++了 变成了2
所以结果为
i=2 2

评分

参与人数 1黑马币 +3 收起 理由
FFF + 3 还需要再认真一点呢!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马