Day11_接口的案例

接口,什么时候用?当一个类中只有自定义常量和抽象方法时;

接口的案例

第一题

编写步骤:

  1. 定义接口A,普通类B实现接口A
  2. A接口中,定义抽象方法showA。
  3. A接口中,定义默认方法showB。
  4. B类中,重写showA方法
  5. 测试类中,创建B类对象,调用showA方法,showB方法
package com.atguigu.test01;

public class Test01 {
	public static void main(String[] args) {
		B b = new B();
		b.showA();
		b.showB();
	}
}
interface A{
	void showA();
	default void showB(){
		System.out.println("BBB");
	}
}
class B implements A{

	@Override
	public void showA() {
		System.out.println("AAA");
	}
	
}

第二题

  • 编写步骤
  1. 定义接口Universe,提供抽象方法doAnything。

  2. 定义普通类Star,提供成员发光shine方法,打印“star:星星一闪一闪亮晶晶"

  3. 定义普通类Sun,

    继承Star类,重写shine方法,打印"sun:光照八分钟,到达地球"

    实现Universe接口,实现doAnything,打印"sun:太阳吸引着9大行星旋转"

  4. 测试类中,创建Star对象,调用shine方法

  5. 测试类中,多态的方式创建Sun对象,调用doAnything方法,向下转型,调用shine方法。

package com.atguigu.test02;

public class Test02 {
	public static void main(String[] args) {
		Star s = new Star();
		s.shine();
		
		System.out.println("======================");
		Universe u = new Sun();
		u.doAnything();
		Sun sun = (Sun) u;
		sun.shine();
	}
}
interface Universe{
	void doAnything();
}
class Star{
	public void shine(){
		System.out.println("star:星星一闪一闪亮晶晶");
	}
}
class Sun extends Star implements Universe{
	@Override
	public void shine(){
		System.out.println("sun:光照8分钟到达地球");
	}
	@Override
	public void doAnything() {
		System.out.println("sun:太阳吸引着9大行星旋转");
	}
	
}

第三题

  • 模拟接待员接待用户,根据用户id,给用户分组。
  • 定义用户类:
    • 属性:用户类型,用户id
    • 提供基本的构造方法和get方法,set方法
  • 定义接口Filter:
    • 提供抽象方法filterUser(User u)
  • 定义实现类V1Filter,实现抽象方法,将用户设置为v1
  • 定义实现类V2Filter,实现抽象方法,将用户设置为v2
  • 定义实现类AFilter,实现抽象方法,将用户设置为A
  • 定义接待员类Receptionist:
    • 属性:接口Filter
    • 提供基本的构造方法和get方法,set方法
    • 成员方法:接待用户方法,设置用户类型。
  • 测试类:
    • 初始化15个User对象,id为1-15。
    • 创建三个接待员对象。
      • 第一个接待员,设置接待规则,将1-5号用户类型设置为v1。
      • 第二个接待员,设置接待规则,将6-10号用户类型设置为v2。
      • 第三个接待员,设置接待规则,将11-15号用户类型设置为A。
    • 遍历数组,给用户分区。
  • 代码实现,效果如图所示:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OJLO4liq-1635857822327)(imgs/1559215024155.png)]
package com.atguigu.test05;

public class Test05 {
	public static void main(String[] args) {
		User[] all = new User[15];
		for (int i = 0; i < all.length; i++) {
			all[i] = new User(null,i+1);
		}
		V1Filter v1F = new V1Filter();
		V2Filter v2F = new V2Filter();
		AFilter aF = new AFilter();
		Receptionist r1 = new Receptionist(v1F);
		for (int i = 0; i < 5; i++) {
			r1.recept(all[i]);
		}
		Receptionist r2 = new Receptionist(v2F);
		for (int i = 5; i < 10; i++) {
			r2.recept(all[i]);
		}
		Receptionist r3 = new Receptionist(aF);
		for (int i = 10; i < 15; i++) {
			r3.recept(all[i]);
		}
		for (int i = 0; i < all.length; i++) {
			System.out.println(all[i]);
		}
	}
}
class User{
	private String type;
	private int id;
	public User(String type, int id) {
		super();
		this.type = type;
		this.id = id;
	}
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	@Override
	public String toString() {
		return id + "-" + type;
	}
}
interface Filter{
	void filterUser(User u);
}

class V1Filter implements Filter{

	@Override
	public void filterUser(User u) {
		u.setType("v1");
	}
	
}
class V2Filter implements Filter{

	@Override
	public void filterUser(User u) {
		u.setType("v2");
	}
	
}
class AFilter implements Filter{

	@Override
	public void filterUser(User u) {
		u.setType("A");
	}
	
}

class Receptionist{
	private Filter filter;

	public Receptionist(Filter filter) {
		super();
		this.filter = filter;
	}

	public Filter getFilter() {
		return filter;
	}

	public void setFilter(Filter filter) {
		this.filter = filter;
	}
	public void recept(User u){
		if(u.getType() != null){
			return ;
		}
		filter.filterUser(u);
	}
}

第四题

案例:

​ 1、声明可支付接口Payable:

​ 包含抽象方法:void pay();

​ 2、声明支付枚举类Payment:

​ (1)创建常量对象:支付宝(ALIPAY),微信(WECHAT),信用卡(CREDIT_CARD),储蓄卡(DEPOSIT_CARD)

​ (2)枚举类Payment实现接口Payable

​ ①支付宝/微信:对接口的实现是打印“扫码支付”

​ ②信用卡/储蓄卡:对接口的实现是打印“输入卡号支付”

​ 3、在测试类中,获取所有支付对象,并调用它们的pay()

package com.atguigu.test03;

public class Test03 {
	public static void main(String[] args) {
		Payment[] values = Payment.values();
		for (int i = 0; i < values.length; i++) {
			values[i].pay();
		}
	}
}
interface Payable{
	void pay();
}
enum Payment implements Payable{
	ALIPAY{
		@Override
		public void pay() {
			System.out.println("扫码支付");
		}
	},WECHAT{
		@Override
		public void pay() {
			System.out.println("扫码支付");
		}
	},CREDIT_CARD,DEPOSIT_CARD;

	@Override
	public void pay() {
		System.out.println("输入卡号支付");
	}
}

我的github欢迎你

上一篇:【day11】抽象与接口—Java—翁恺老师慕课—面向对象程序设计


下一篇:Day11(对多态向下转型的理解)