初学Java, 关于继承的例子

happyliuliming 2014-01-06 11:27:10
书上的例子,为毛跟书上答案不同。
1.为什么“创建荧光灯”之后,不先出现"构造 Lamp..."?
2.还有下面两句什么意思?
public Filament getFilament(){
return filament;
}
public void setFilament(Filament filament){
this.filament=filament;
}

run:
创建白炽灯
构造 Lamp...
开始构造灯丝...
开始创建白炽灯...
创建荧光灯
开始构造灯丝...
构造 Lamp...
开始创建荧光灯...
创建节能灯
构造 Lamp...
开始创建荧光灯...
开始创建节能灯...
BUILD SUCCESSFUL (total time: 0 seconds)
//------------
public class LampTest{
public LampTest(){
System.out.println("构造 Lamp...");
}
public void light(){
System.out.println("发光...");
}
public static void main(String[] arguments){
System.out.println("创建白炽灯");
IncandecentLamp iLamp=new IncandecentLamp();
System.out.println("创建荧光灯");
LuorescentLamp l1=new LuorescentLamp();
System.out.println("创建节能灯");
EnergySavingLamp el=new EnergySavingLamp();
}
}

class Filament{
public Filament(){
System.out.println("开始构造灯丝...");
}
}
class IncandecentLamp extends LampTest{
private Filament filament=new Filament();
public IncandecentLamp(){
System.out.println("开始创建白炽灯...");
}
public Filament getFilament(){
return filament;
}
public void setFilament(Filament filament){
this.filament=filament;
}
}
class LuorescentLamp extends LampTest{
public LuorescentLamp(){
System.out.println("开始创建荧光灯...");
}
private static Filament filament=new Filament();
public static Filament getFilament(){
return filament;
}
public static void setFilament(Filament filament){
LuorescentLamp.filament=filament;
}
}
class EnergySavingLamp extends LuorescentLamp{
public EnergySavingLamp(){
System.out.println("开始创建节能灯...");
}
}
...全文
67 点赞 收藏 2
写回复
2 条回复
winewig 2014年01月07日
后面那两句话在程序中不会被执行,只是成员变量set和get方法, 因为成员变量是private,产生的对象用这两个方法赋值取值。
回复 点赞
winewig 2014年01月07日
在Class LuorescentLamp 中存在静态成员变量: private static Filament filament=new Filament(); 在Java中,会先执行这条,再进入父类构造。 Java中执行顺序: 1. 父类的静态成员变量定义与静态初始化块 2. 子类的静态成员变量定义与静态初始化块 3. 父类的非静态成员变量定义与动态初始化块 4. 父类构造方法 5. 子类的非静态成员变量定义与动态初始化块 6. 子类构造方法
回复 点赞
发动态
发帖子
Java SE
创建于2007-09-28

3.4w+

社区成员

30.7w+

社区内容

Java 2 Standard Edition
社区公告
暂无公告