黑马程序员技术交流社区

标题: 关于继承的问题 [打印本页]

作者: che201311    时间: 2013-11-23 16:12
标题: 关于继承的问题

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

作者: che201311    时间: 2013-11-23 16:14
不明白i值的变化?
作者: 张天昊76    时间: 2013-11-23 16:54
在子类的构造函数中,默认的有一句代码是调用父类的构造函数,而且是在第一行,所以先打印了一句
A is created and i=1
然后再执行子类构造函数中相应的代码,就打印出
B is created and i=1
然后调用了printI()方法,子类继承了父类中得i,所以打印了i=2,之所以后面的那个值是2而不是1,实际上是还是子类的i的值,要想要得到父类中i的值,可以在这个方法中建立父类的对象。通过父类对象来使用父类的i的值。
作者: 心的方向    时间: 2013-11-23 16:57
当人new B的时候它会先调用父类的无参构造方法
作者: 何超    时间: 2013-11-23 20:59
B b=new B()
由于你没重新定义i 所以A B中的i都是同一个
首先会运行A的构造函数然后运行B的构造函数
所以结果会是  
1
1
然后i++了 变成了2
所以结果为
i=2 2




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2