Java学习第十一天--接口

接口的意义:

从宏观来看是一种规则,从微观来看是一个功能

例如:1.猫会吃东西,狗会吃东西,羊会吃东西...

吃东西便是一个功能可以作为接口

2.电脑的USB接口在设计时是否考虑上面插入的是鼠标还是键盘
只要符合USB的规则就可以

接口的定义

使用格式:

访问权限修饰符 interface 接口名{

        }

接口中可以有什么:

1,可以有公共静态常量
        接口中的属性默认使用public static final修饰并不能修改
2,接口中可以定义公共静态方法
3,接口中可以定义公共抽象方法
        接口中没有方法体的方法默认使用public abstract修饰
4,jdk1.8以后可以在接口中定义使用default修饰的普通方法


不能有什么:
1,不能有普通属性
2,不能有构造函数
3,不能定义普通方法

/*
 * 定义一个接口
 */
public interface MyInterface {
	//接口中的属性默认使用public static final修饰
	//接口中只有公共静态常量
	public static final String NAME = "xxx";
	String TAG = "tag";
	//接口中不能有构造函数
	//接口中不能定义普通方法 ,可以定义公共静态方法(public修饰)
	public static void test01() {}
	//接口中可以定义公共抽象方法
	public abstract void test02();
	//接口中没有方法体的方法默认使用public abstract修饰
	void test03();
	//jdk1.8以后可以使用default修饰普通的方法
	default void test04() {
		System.out.println("xxx");
	}
}

接口的使用

接口与接口

关系:多继承关系

一个接口可以有多个父接口,格式为

访问权限修饰符 interface 子接口名 extends 父接口1,父接口2...{

}

可以继承:
        1,子接口继承了父接口的公共静态常量属性
        2,子接口可以继承父接口的公共抽象方法
不能继承:
        1,子接口无法继承父接口的公共静态方法

接口与类

关系:多实现关系

一个类可以实现多个接口,格式为

访问权限修饰符 class 子类名 implements 父接口1,父接口2...{

}

注意:
1,一个类实现多个接口,要么重写所有接口中的抽象方法,要么自己也是抽象类
2,子类继承了父接口的公共静态常量属性,但是不能继承父接口的公共静态方法
3,一个子类对象可以转换为多个实现的接口对象

练习:鸟会飞,飞机会飞,请使用接口实现
类:
        鸟类
        实现飞的接口
飞机类
        实现飞的接口
接口:
        飞的接口

//飞的接口
public interface FlyInterface {
	void fly();
}
//飞机类实现飞的接口
public class Plane implements FlyInterface{
	public void fly() {
		System.out.println("飞机会飞");
	}
}
//鸟类实现飞的接口
public class Bird implements FlyInterface {
	public void fly() {
		System.out.println("鸟会飞");
	}
}
public class Demo03 {
	public static void main(String[] args) {
		Bird bird = new Bird();
		Plane plane = new Plane();
		bird.fly();
		plane.fly();
	}
}

常量接口:
概念:一个接口中只有定义的公共静态常量
如:
public interface LoginInterface{
        String OK = "登录成功";
        String ERROR_01 = "账号密码不匹配";
        String ERROR_02 = "账号不符合规则";
        String ERROR_03 = "密码不符合规则";
        String ERROR_04 = "账号不存在";
        String ERROR_05 = "验证码错误";
...
}
优点:
        便于使用,方便修改
函数式接口
概念:一个接口中只有一个抽象方法,不管属性
如:
public interface MethodInterface{
        返回值类型 method(形参列表);
}
这种接口可以在后期配合Lambda表达式使用,使代码更加简洁,便于书写

例:

/**
 * 请使用接口实现,杯子可以装水,烧水器可以装水
 *
 */
public interface GetWater {
	void getWater();
}
public class Cup implements GetWater{

	public void getWater() {
		System.out.println("使用杯子装水");
		
	}
	
}
public class SH implements GetWater{

	public void getWater() {
		System.out.println("使用烧水壶装水");
		
	}

}
public class Water {
	private String name;

	public Water() {
		super();
	}

	public Water(String name) {
		super();
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	public void water(GetWater getWater) {
		System.out.println(name);
		getWater.getWater();
	}
	
}
/*
 * 请使用接口实现,杯子可以装水,烧水器可以装水
 */
public class Demo05 {
	public static void main(String[] args) {
		Water water01 = new Water("矿泉水");
		Water water02 = new Water("自来水");
		Cup cup = new Cup();
		water01.water(cup);
		
		SH sh = new SH();
		water02.water(sh);
	}
}

接口的回调

概念:接口对象传出去,接口对象回来调用接口中的方法

例如上面装水的问题,其中一段代码

public void water(GetWater getWater) {
		System.out.println(name);
		getWater.getWater();//这里调用的方法就使用了接口的回调
	}

接口的回调在后面匿名内部类中有更明显的应用,匿名内部类稍后也会更新

有什么问题欢迎留言讨论

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值