多重继承跟多重实例化
多重继承和多重实例化
下面代码的运行结果是
**************************
这是票据的台头!
这是票据正文!
这是票据的脚注!
********************************
比较难理解的是,在main方法里面,经过多重的new之后,
T.printticket() 这段代码的运行为什么会得出上述的结果,
其中逻辑是如何运行的?
因为涉及到多重继承和多重实例化,所以比较难理解。
*************************************
------解决思路----------------------
T.printTicket();不是调用HeadDecorator 的print吗?
那就是按顺序
System.out.println("这是票据的台头!");
super.printTicket();
然后super调用的不就是Decorator的print嘛,只是这个ticket是你传进来的FootDecorator
所以然后不就是调用FootDecorator的print
super.printTicket();
System.out.println("这是票据的脚注!");
第二个super也是调用Decorator的print,只是这个ticket是你传进来的SalesTicket的所以调用
SalesTicket的printTicket
System.out.println("这是票据正文!");
可以打个断点看下更清楚了
下面代码的运行结果是
**************************
这是票据的台头!
这是票据正文!
这是票据的脚注!
********************************
比较难理解的是,在main方法里面,经过多重的new之后,
T.printticket() 这段代码的运行为什么会得出上述的结果,
其中逻辑是如何运行的?
因为涉及到多重继承和多重实例化,所以比较难理解。
*************************************
package pe20062;
//正文类
class SalesTicket {
public void printTicket() {
System.out.println("这是票据正文!");
}
}
//抬头和脚注的父类
class Decorator extends SalesTicket{
SalesTicket ticket;
public Decorator(SalesTicket t){ //decorator的构造方法,有参数t
this.ticket = t;
}
public void printTicket(){ //decorator的方法
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 Main1 {
public static void main(String[] args){
SalesTicket S= new SalesTicket();
FootDecorator F = new FootDecorator(S);
HeadDecorator T = new HeadDecorator(F);
T.printTicket();
}
}
------解决思路----------------------
T.printTicket();不是调用HeadDecorator 的print吗?
那就是按顺序
System.out.println("这是票据的台头!");
super.printTicket();
然后super调用的不就是Decorator的print嘛,只是这个ticket是你传进来的FootDecorator
所以然后不就是调用FootDecorator的print
super.printTicket();
System.out.println("这是票据的脚注!");
第二个super也是调用Decorator的print,只是这个ticket是你传进来的SalesTicket的所以调用
SalesTicket的printTicket
System.out.println("这是票据正文!");
可以打个断点看下更清楚了