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传进去正好。