日期:2014-05-20  浏览次数:20641 次

Java 构造方法传递对象问题
要求程序输出一下内容:
这是票据的抬头!
这是票据的正文!
这是票据的脚注!
—————————————————
这是票据的抬头!
这是票据的脚注!

代码如下:
 class SalesTicket{
 public void printTicket(){
  System.out.println("这是票据正文!");
 }
}

 class Decorator extends SalesTicket{
 SalesTicket ticket;
 
 public Decorator(SalesTicket t){
  ticket=t;;
 }
 
 public void printTicket(){
 if(ticket!=null){
 ticket.printTicket();
 }
 }
 
}

 class HeadDecorator extends Decorator{
  public HeadDecorator(SalesTicket t){
  super(t);
  }
  public void printTicket(){
  System.out.println("这是票据的抬头!");
  super.printTicket();
  }
}

 class FootDecorator extends Decorator{
  public FootDecorator(SalesTicket t){
  super(t);
  }
  public void printTicket(){
  super.printTicket();
  System.out.println("这是票据的脚注!");
  }
 }
 
 public class Main{
  public static void main(String args[]){
  SalesTicket T = new HeadDecorator(new FootDecorator(new SalesTicket())); // ???????
  System.out.println("this is test");
  T.printTicket();
  System.out.println("--------------");
  T=new FootDecorator(new HeadDecorator(null));
  T.printTicket();
  }
 }
 
 我该如何理解 SalesTicket T = new HeadDecorator(new FootDecorator(new SalesTicket())); 里面的参数传递调用过程,才能产生 
 
 “这是票据的抬头!
这是票据的正文!
这是票据的脚注!”  

这样的输出结果?


顺便问个C语言数据结构的问题。

在函数Del_elem中必须使用栈的基本操作进行栈上的运算,实现栈的基本操作的函数原型说明如下:
void InitStack(STACK *S): 初始化栈
void Push(STACK *S,char e): 将一个字符压栈,栈中元素数目增1
void Pop(STACK *S) : 栈顶元素出栈,栈中元素数目减1
char Top(STACK *S): 返回非空栈顶元素值,栈中元素数目不变
bool IsEmpty(STACK S): 若S是空栈,则返回TRUE ;否则返回FALSE


在数据结构的栈里面,该怎么理解 一个 栈的名字带有 * 和不带的区别,以及 & 的区别。在一道题目里我看到如 STACK s,
然后栈的操作 InitStack(&s) Push(&s) !IsEmpty(s) Pop(s) 该如何理解里面的参数。
麻烦大家替我解释一下。谢谢。

 




------解决方案--------------------
我该如何理解 SalesTicket T = new HeadDecorator(new FootDecorator(new SalesTicket())); 里面的参数传递调用过程,才能产生


-----------------------------
从里到外解释,
1.new SalesTicket() 就产生了一个 SalesTicket对象
2. FootDecorator 有个构造函数需要一个SalesTicket对象, 所以 new FootDecorator(new SalesTicket())结果就是生成了一个 FootDecorator, 叫它X好了。
3.因为FootDecorator间接继承于SalesTicket,所以X也是一个SalesTicket对象。
4。正好HeadDecorator的构造函数需要一个SalesTicket对象,所以把X传进去正好。