题目描述
设计一个台灯类(Lamp)其中台灯有灯泡类(Buble)的属性buble表示它所用的灯泡,boolean类型的属性isTurnOn,表示灯的开关状态;一个实例方法void turn()表示按一下台灯开关,从而引起台灯开关状态的变化,当台灯被关上时,输出“台灯被关上,灯黑了”当台灯被打开时,由其中的灯泡调用work()方法。一个带Buble类型参数和boolean参数的构造方法。
设计一个抽象的灯泡类(Buble),灯泡类有int类型的power属性表示灯泡瓦数,还有一个抽象的实例方法work()方法表示灯泡工作时会发光;灯泡类分别提供一个无参构造方法和一个参数的构造方法,没有参数时表示灯泡的瓦数为15瓦。再设计红灯泡类(RedBuble)和绿灯泡类(GreenBuble),他们都是继承灯泡类(Buble)的具体的子类,都将重写work(),分别显示“XX瓦的灯泡发出红光”、“XX瓦的灯泡发出绿光~”,也提供两个构造方法。
在主类中创建两个台灯对象,其运行结果如样例输出所示。
public class Main {
public static void main(String[] args) {
Lamp lamp1 = new Lamp(new RedBuble(25), false);
Lamp lamp2 = new Lamp(new GreenBuble(), true);
System.out.println("lamp1按两次开关:");
lamp1.turn();
lamp1.turn();
System.out.println();
System.out.println("lamp2按两次开关:");
lamp2.turn();
lamp2.turn();
}
}
输出样例
lamp1按两次开关:
25瓦的灯泡发出红光~
本台灯被关上,灯黑了~
lamp2按两次开关:
本台灯被关上,灯黑了~
15瓦的灯泡发出绿光~
用户代码
回答:
import java.util.*;
public class Test{
public static void main(String[] args){
Lamp lamp1 = new Lamp(new RedBuble(25), false);
Lamp lamp2 = new Lamp(new GreenBuble(), true);
System.out.println("lamp1按两次开关:");
lamp1.turn();
lamp1.turn();
System.out.println();
System.out.println("lamp2按两次开关:");
lamp2.turn();
lamp2.turn();
System.out.println(new Date());
}
}
class Lamp{
Buble buble;
boolean isTurnOn;
Lamp(Buble buble1,boolean state){
buble = buble1;
isTurnOn = state;
}
void turn(){
isTurnOn = !isTurnOn;
if(isTurnOn == false){
System.out.println("台灯被关上,灯黑了");
}
else{
buble.work();
}
}
}
abstract class Buble{
int power;
abstract void work();
Buble(){
power = 15;
}
Buble(int n){
power = n;
}
}
class RedBuble extends Buble{
RedBuble(){
power = 15;
}
RedBuble(int n){
power = n;
}
void work(){
System.out.println(power+"瓦的灯泡发出红光");
}
}
class GreenBuble extends Buble{
GreenBuble(){
power = 15;
}
GreenBuble(int n){
power = n;
}
void work(){
System.out.println(power+"瓦的灯泡发出绿光");
}
}