您的位置:首页 > 编程语言 > Java开发

java中的继承关系

2006-11-04 20:35 211 查看
以下是我对这段代码的分析




public class Target extends Depend ...{




int i = 30 ;






public Target() ...{


print();


i = 40 ;




}




void print() ...{




System.out.println( " Target=> " + i);




}






public static void main(String[] args) ...{




System.out.println( new Target().i);




}




}






class Depend ...{




int i = 10 ;




public Depend() ...{




print();


i = 20 ;


}




void print() ...{




System.out.println( " Depend=> " + i);


}




}



这段代码 执行的结果是:

Target=> 0
Target=> 30
40

首先 运行的时候 先执行Target的main函数new Target().i 这里要实例化一个Target对象 于是会执行Target的构造函数




public Target() ...{


print();


i = 40 ;




}



但是我们知道 构造函数中有个super();(这个是默认要执行的 因为你要构成一个子类 你必须先有一个父类的实例哦)




public Target() ...{


super();


print();


i = 40 ;




}



那么在执行super();的时候 就会实例话一个父类对象 此时就会给父类的变量分配内存 于是父类的变量i被赋予10,

然后执行父类构造函数中的print()方法 然而子类中也有print()方法 即子类重写(覆盖了)父类的print方法 那么在调用print()的时候 实际是是执行的是子类的print方法 然而此时子类还没实例化 变量i也还没分配内存 其默认值是0,于是打印出 Target=> 0 当print方法执行完了后 接着执行父类构造方法中的给i(父类的i)赋值20 到此 父类已经实例化了 即super()方法执行完毕 开始实例化子类 于是给子类的i分配内存,子类i被赋予30,并且执行super下面的print()方法,打印出 Target=> 30 ,然后在执行i=40给子类的i赋值 到次 子类的构造方法执行完毕 然后就是执行main中的打印子类的i 输出40

以上是个人的分析 如果有什么不对的 请高手指点.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: