回调思想-

定义:当一个类的一个对象完成某件事以后,这个对象通知另外类的一个对象开始执行另一件事.

代码举例:

class HairTeacher{
  void makehHair(){
  }
}

class HairWasher{
  void washHair(HairTeacher hairT){
	system.out.println("洗头发");
	hairT.makeHandsome ();
	}
}

class Entrance{
	public static void main(String [] args){
		HairWasher hw=new HairWasher();
		hw.washHair(new HairTeacher ());
	}
}

如果洗发师不仅仅要通知理发师,还可能要通知化妆师或服装师,应该怎么办?

我们创建一个类Beauty,是化妆师、理发师、服装师的父类

class Beauty{
	void makeBeauty(){
	  system.out.println("变美");	
	}
}

class HairTeacher extends Beauty{
	void makeBeauty(){
      system.out.println("做头发");	
  }

}

class DressTeacher extends Beauty{
    void makeBeauty(){
	  system.out.println("设计服装");	
	}
}

class FaceTeacher extends Beauty{	
    void makeBeauty(){
	  system.out.println("化妆");	
	}
}

class HairWasher{
  void washHair(HairTeacher hairT){
	system.out.println("洗头发");
	hairT.makeHandsome ();
	}
}


class Entrance{
	public static void main(String[] args){
		HairWasher hw=new HairWasher();

		hw.washHair(new HairTeacher ());
		hw.washHair(new DressTeacher());
		hw.washHair(new FaceTeacher());
    }
}

       实际上,我们并不需要beauty类中的makebeauty方法,因为子类会复写makebeauty方法,那我们考虑将makebeauty方法写成抽象方法,将beauty类设为抽象类如何?

abstract class Beauty{
	abstract void makeHandsome();
}

       这样做还不是完美的,因为如果用抽象类,那每个具体的类(例如发型师,服装师,造型师)必须extends  beauty类,为了一个洗头小妹的通知作用,浪费了宝贵的继承机会(一个类只有一个直接父类)。

        所以最好的写法是将beauty变成一个接口,让每个具体的类(例如发型师,服装师,造型师)去implements  beauty类

interface Beauty{
	abstract void makeBeauty();
}

class HairTeacher implements Beauty{
	void makeBeauty(){
      system.out.println("做头发");	
    }
}

class DressTeacher implements Beauty{
	void makeBeauty(){
      system.out.println("设计服装");	
    }
}

class FaceTeacher implements Beauty{	
	void makeBeauty(){
      system.out.println("化妆");	
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值