欢迎来到天天文库
浏览记录
ID:15726940
大小:42.50 KB
页数:5页
时间:2018-08-05
《java技术专题综述之构造方法篇》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、JAVA技术专题综述之构造方法篇类的继承机制使得子类可以使用父类的功能(即代码),并且子类也具有父类的类型。下面介绍类在继承关系上的初始化的顺序问题。示例1:classSuperClass{SuperClass(){System.out.println("SuperClassconstructor");}}publicclassSubClassextendsSuperClass{SubClass(){System.out.println("SubClassconstructor");}publicstaticvoidmain(String[]args){SubClasssub=newSub
2、Class("sub");}}在JDK下编译此程序不能成功。正如上例中说的:程序在初始化子类时先要寻找其父类的默认构造方法,结果没找到,那么编译自然不能通过。解决这个问题有两个办法:1.在父类中增加一个默认构造方法。2.在子类的构造方法中增加一条语句:super(str);且必须在第一句。这两种方法都能使此程序通过编译,但就本程序来说运行结果却不相同。第1种方法的运行结果是:Subwithastring.第2种方法的运行结果是:Superwithastring.Subwithastring.第2种解决方法实际上是指定编译器不要寻找父类的默认构造方法,而是去寻找带一个字符串为参数的构造方法。
3、下面介绍对象的初始化顺序问题。示例3:classOne{One(Stringstr){System.out.println(str);}}classTwo{Oneone_1=newOne("one-1");Oneone_2=newOne("one-2");Oneone_3=newOne("one-3");Two(Stringstr){System.out.println(str);}}publicclassTest{publicstaticvoidmain(String[]args){System.out.println("Testmain()start...");Twotwo=newTw
4、o("two");}}输出结果:Testmain()start...one-1one-2one-3two在main()方法中实例化了一个Two类的对象。但程序在初始化Two类的对象时,并非先调用Two类的构造方法,而是先初始化Two类的成员变量。这里Two类有3个成员变量,它们都是One类的对象,所以要先调用3次One类的相应的构造方法。最后在初始化Two类的对象。示例4:classOne{One(Stringstr){System.out.println(str);}}classTwo{Oneone_1=newOne("one-1");Oneone_2=newOne("one-2");s
5、taticOneone_3=newOne("one-3");Two(Stringstr){System.out.println(str);}}publicclassTest{publicstaticvoidmain(String[]args){System.out.println("Testmain()start...");Twotwo_1=newTwo("two-1");System.out.println("------------");Twotwo_2=newTwo("two-2");}}输出结果:Testmain()start...one-3one-1one-2two-1-----
6、-------one-1one-2two-2如果一个类中有静态对象,那么它会在非静态对象前初始化,但只初始化一次。非静态对象每次调用时都要初始化。示例5:classOne{One(Stringstr){System.out.println(str);}}classTwo{Oneone_1=newOne("one-1");Oneone_2=newOne("one-2");staticOneone_3=newOne("one-3");Two(Stringstr){System.out.println(str);}}publicclassTest{staticTwotwo_3=newTwo("t
7、wo-3");publicstaticvoidmain(String[]args){System.out.println("Testmain()start...");Twotwo_1=newTwo("two-1");System.out.println("------------");Twotwo_2=newTwo("two-2");}}输出结果:one-3one-1one-2two-3Testmain()start..
此文档下载收益归作者所有