阅读以下说明和Java程序代码 将应填入(n)处的字句写在答题纸的对应栏内。【说明】 在下面
问题详情
阅读以下说明和Java程序代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
在下面的Java程序代码中,类SalesTicket能够完成打印票据正文的功能,类 HeadDecorator与FootDecorator分别能够完成打印票据的台头和脚注的功能。
已知该程序运行后的输出结果如下所示,请填补该程序代码中的空缺。
这是票据的台头!
这是票据正文!
-------------------
这是票据的脚注!
这是票据的台头!
这是票据的脚注!
【tava程序代码】
public class SalesTicket {
public void printTicket() {
System. out. println ("这是票据正文 ! ");
}
}
public class Decorator extends SalesTicket{
SalesTicket ticket;
public Decorator(SalesTicket t) {
ticket = t;
}
public void printTicket(){
if(ticket != null)
ticket.printTicket();
}
public class HeadDecorator extends Decorator{
public HeadDecorator(SalesTicket t) {
(1)
}
public void printTicket() {
System. out.println("这是票据的台头! ");
super.printTicket();
}
}
public class FootDecorator extends Decorator{
public FootDecorator(SalesTicket t) {
(2);
}
public void printTicket() {
super, printTicket ();
System. out.println ("这是票据的脚注!");
}
}
public class Main {
public static void main(String[] args) {
T = new HeadDecorator((3));
T=(4);
System.out.println("------------------------------------");
T = new FootDecorator((5));
T.printTicket ();
}
}
参考答案
正确答案:(1)super(t)(2)super(t)(3)new FootDecorator(new SalesTicket())(4)printTicket()(5)new HeadDecorator(null)
(1)super(t)(2)super(t)(3)new FootDecorator(new SalesTicket())(4)printTicket()(5)new HeadDecorator(null) 解析:本题中的类HeadDecorator和FootDecorator都继承了Decortator类,因此在构造函数中需要对Decorator类进行初始化,所以空(1)和(2)处应该为super(t)。类Main中空(3)和(4)处程序代码的输出为“这是票据的台头!这是票据正文!这是票据的脚注!”,由于T是一个headDecorator类的实例,因此空(4)处一定是printTicket方法的调用,类headDecorator将输出“这是票据的台头!”后调用其父类的printTicket方法,而仅仅只有FootDecorator类可以输出“这是票据的脚注!”,因此,当前父类的具体实例对象应该为FootDecorator的实例,所以空(3)处应该为new(FootDecorator(new SalesTicket))。空(5)同空(3)原理相同,但由于不需要输出票据的正文,因此在构造HeadDecorator对象的时候其参数为null即可。