模拟一家大型门业制造公司,可以根据用户需求帮你定制具有各种功能的门。说明如下:
-
定义通用的门Door类,具有门最基本的功能——开/关,分别对应抽象方法:openDoor( )和closeDoor( );
-
公司设计开发了各种功能模块组件,可供用户选配安装在门上。包括:
- 防盗功能
- 防火功能
- 防潮功能
- 其他后续开发功能......
下面分别是他们的功能接口:
interface TheftProofable {//防盗 void theftProof(); } interface WaterProofable { //防潮 void waterProof(); } interface FireProofable { //防火 void fireProof(); }
-
综合利用继承、抽象类、接口的知识设计一组门。例如:某用户定制了一种门,使用石棉作防火材料,并具有密码防盗功能,该类可定义为:
class FireTheftProofDoor extends Door implements FireProofable, TheftProofable { public void fireProof() { System.out.println("该高级防盗门包含石棉隔热层,具有防火功能。"); } public void theftProof() { System.out.println("该门具有密码防盗效果。"); } public void openDoor() { System.out.println("输入口令。。。口令正确,防盗门开启。。。"); } public void closeDoor() { System.out.println("门已关,具有防火防盗效果。"); } }
-
定义一个方法,用于检测某个具体的门具有那些功能。
public static void testDoor(Door door) ;
该方法打印这扇门的功能信息。要求依次检查其有没有防火、防盗和防潮功能。例如,对上述已经定义的FireTheftProofDoor类,创建实例后,对其进行测试:
Door door=new FireTheftProofDoor(); String info=testDoor(door);
则程序输出:“该门的检查结果是:可防火 可防盗 无防潮功能 ”
提示:可用instanceof来实现 -
测试代码如下:
public class Main { public static void main(String[] args) { System.out.println("某普通防火门(无防盗防潮等功能)的测试:"); FireProofable firDoor = new FireProofDoor(); firDoor.fireProof(); Door door = (Door) firDoor; door.openDoor(); door.closeDoor(); testDoor(door); System.out.println("\n对某高级防火防盗门的测试:"); firDoor = new FireTheftProofDoor(); firDoor.fireProof(); door = (Door) firDoor; door.openDoor(); door.closeDoor(); System.out.println("\n 创建一扇指纹防盗门,并检验该门功能:"); TheftProofable thefeDoor = new FingerDoor(); door = (Door) thefeDoor; if (door instanceof TheftProofable) { thefeDoor = (TheftProofable) door; System.out.println("该门实现了防盗接口,具有防盗功能"); thefeDoor.theftProof(); door.openDoor(); door.closeDoor(); } testDoor(door); }
请根据以上描述及输出结果,补充完成其余类的定义。
输入样例:
在这里给出一组输入。例如:
无
输出样例:
在这里给出相应的输出。例如:
某普通防火门(无防盗防潮等功能)的测试:
该门包含石棉隔热层,具有防火功能。
门开启。。。
门已关,具有防火效果。
该门的检查结果是:可防火 无防盗功能 无防潮功能
对某高级防火防盗门的测试:
该高级防盗门包含石棉隔热层,具有防火功能。
输入口令。。。口令正确,防盗门开启。。。
门已关,具有防火防盗效果。
创建一扇指纹防盗门,并检验该门功能:
该门实现了防盗接口,具有防盗功能
该门采用指纹防盗技术
请按指纹....指纹正确...已开门
已关门,指纹保护已开启
该门的检查结果是:无防火功能 可防盗 无防潮功能
答案:
abstract class Door{
void openDoor(){
return;
}
void closeDoor(){
return;
}
}
interface TheftProofable {//防盗
void theftProof();
}
interface WaterProofable { //防潮
void waterProof();
}
interface FireProofable { //防火
void fireProof();
}
class FingerDoor extends Door implements TheftProofable {
@Override
public void theftProof() {
System.out.println("该门采用指纹防盗技术");
}
public void openDoor() {
System.out.println("请按指纹....指纹正确...已开门");
}
public void closeDoor() {
System.out.println("已关门,指纹保护已开启");
}
}
class FireProofDoor extends Door implements FireProofable{
@Override
public void fireProof() {
System.out.println("该门包含石棉隔热层,具有防火功能。");
}
public void openDoor() {
System.out.println("门开启。。。");
}
public void closeDoor() {
System.out.println("门已关,具有防火效果。");
}
}
class FireTheftProofDoor extends Door implements FireProofable, TheftProofable {
public void fireProof() {
System.out.println("该高级防盗门包含石棉隔热层,具有防火功能。");
}
public void theftProof() {
System.out.println("该门具有密码防盗效果。");
}
public void openDoor() {
System.out.println("输入口令。。。口令正确,防盗门开启。。。");
}
public void closeDoor() {
System.out.println("门已关,具有防火防盗效果。");
}
}
public class Main {
public static void testDoor(Door door) {
System.out.print("该门的检查结果是:");
if (door instanceof FireProofable){
System.out.print("可防火 ");
}
else System.out.print("无防火功能 ");
if (door instanceof TheftProofable){
System.out.print("可防盗 ");
}
else System.out.print("无防盗功能 ");
if (door instanceof WaterProofable){
System.out.println("可防潮 ");
}
else System.out.println("无防潮功能 ");
}
public static void main(String[] args) {
System.out.println("某普通防火门(无防盗防潮等功能)的测试:");
FireProofable firDoor = new FireProofDoor();
firDoor.fireProof();
Door door = (Door) firDoor;
door.openDoor();
door.closeDoor();
testDoor(door);
System.out.println("\n对某高级防火防盗门的测试:");
firDoor = new FireTheftProofDoor();
firDoor.fireProof();
door = (Door) firDoor;
door.openDoor();
door.closeDoor();
System.out.println("\n 创建一扇指纹防盗门,并检验该门功能:");
TheftProofable thefeDoor = new FingerDoor();
door = (Door) thefeDoor;
if (door instanceof TheftProofable) {
thefeDoor = (TheftProofable) door;
System.out.println("该门实现了防盗接口,具有防盗功能");
thefeDoor.theftProof();
door.openDoor();
door.closeDoor();
}
testDoor(door);
}}