试题八
阅读以下说明和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)
解析:
[分析]: 试题八
本题中的类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即可。