日期:2011-03-22 16:17:00 来源:本站整理
初始化底子类[Java编程]
本文“初始化底子类[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
由于这儿触及到两个类——底子类及衍生类,而不再是从前的一个,所以在想象衍生类的后果对象时,大概会产生一些迷惑.从外部看,仿佛新类拥有与底子类相同的接口,并且可包含一些额外的办法和字段.但担当并非仅仅简单地复制底子类的接口了事.成立衍生类的一个对象时,它在此中包含了底子类的一个“子对象”.这个子对象就象我们按照底子类本身成立了它的一个对象.从外部看,底子类的子对象已封装到衍生类的对象里了.
当然,底子类子对象应当精确地初始化,并且只有一种办法能保证这一点:在构建器中履行初始化,通过调用底子类构建器,后者有充足的本领和权限来履行对底子类的初始化.在衍生类的构建器中,Java会自动插入对底子类构建器的调用.下面这个例子向大家展示了对这种三级担当的利用:
该程序的输出显示了自动调用://: Cartoon.java // Constructor calls during inheritance class Art { Art() { System.out.println("Art constructor"); } } class Drawing extends Art { Drawing() { System.out.println("Drawing constructor"); } } public class Cartoon extends Drawing { Cartoon() { System.out.println("Cartoon constructor"); } public static void main(String[] args) { Cartoon x = new Cartoon(); } } ///:~
Art constructor
Drawing constructor
Cartoon constructor
可以看出,构建是在底子类的“外部”举行的,所以底子类会在衍生类拜候它之前得到精确的初始化.
即便没有为Cartoon()成立一个构建器,编译器也会为我们自动合成一个默许构建器,并发出对底子类构建器的调用.
1. 含有自变量的构建器
上述例子有自己默许的构建器;也就是说,它们不含任何自变量.编译器可以很简单地调用它们,因为不存在具体传送什么自变量的问题.假如类没有默许的自变量,大概想调用含有一个自变量的某个底子类构建器,必须明确地编写对底子类的调用代码.这是用super关键字以及得当的自变量列表实现的,以下所示:
假如不调用BoardGames()内的底子类构建器,编译器就会报告自己找不到Games()情势的一个构建器.除此以外,在衍生类构建器中,对底子类构建器的调用是必须做的第一件事情(如操作失当,编译器会向我们指出).//: Chess.java // Inheritance, constructors and arguments class Game { Game(int i) { System.out.println("Game constructor"); } } class BoardGame extends Game { BoardGame(int i) { super(i); System.out.println("BoardGame constructor"); } } public class Chess extends BoardGame { Chess() { super(11); System.out.println("Chess constructor"); } public static void main(String[] args) { Chess x = new Chess(); } } ///:~
2. 捕捉基本构建器的违例
正如方才指出的那样,编译器会逼迫我们在衍生类构建器的主体中首先设置对底子类构建器的调用.这意味着在它之前不能呈现任何东西.正如大家在第9章会看到的那样,这同时也会避免衍生类构建器捕捉来自一个底子类的任何违例事件.明显,这有时会为我们造成不便.
以上是“初始化底子类[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
- ·上一篇文章:合成与承当的结合
- ·下一篇文章:java的承当初始化
- ·中查找“初始化底子类”更多相关内容
- ·中查找“初始化底子类”更多相关内容
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论