文章目录

  • 一、接口的概念
  • 二、接口的组成
  • 三、接口的定义
  • 四、接口的使用
  • 五、代码说话
  • 六、分享交流


一、接口的概念

官方解释:(该了解的还是得了解)

  • Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

我的解释:

  • 接口是一种“协议”、是一份“契约”,是一种规范。
    打个比方:我使用你的产品,那就必须遵循你的规定,不然就乱套了

二、接口的组成

接口也是一个类、但是它是一个抽象类

  1. 方法只能是抽象方法(public abstract),省略也是
  2. 变量只能是全局常量(public static final),省略也是
  3. 没有构造器

三、接口的定义

直接上代码

interface A{
	//变量省略修饰符号,也是public static final
	int FLAG = 1;
	
	//方法省略修饰符,也是public abstract
	void drive();
}

四、接口的使用

由于接口里面存在抽象方法,所以接口对象不能直接使用关键字new进行实例化。接口的使用原则如下:
1. 接口必须要有子类,但此时一个子类可以使用implements关键字实现多个接口;
2. 接口的子类(如果不是抽象类),那么必须要覆写接口中的全部抽象方法;
3. 接口的对象可以利用子类对象的向上转型进行实例化。
4. 或者直接用实现接口的匿名类对象来调用接口中的方法

敲黑板:3 .4点很重要,也很常用

五、代码说话

光看是不行的,小伙伴一起来撸代码吧

package Java_study;
/**
 * 接口学习
 * 1.接口与接口之间也是继承关系
 * 2.接口中的变量只能是常量,为public static final
 * 3.接口中的方法为抽象方法,为public abstract
 * @author 放牛娃学编程(微信公众号)
 *
 */

//定义一个轮子接口(包含轮子大小、时速)
interface wheel{
	//变量省略修饰符号,也是public static final
	int SIZE =200;
	
	//方法省略修饰符,也是public abstract
	void speed();
}

//定义一个发动机接口(包含功率、寿命)
interface engine{
	//发动机寿命
	public static final int LifeTime = 20;
	
	//发动机功率
	public abstract void power();
}

//宝马车类实现wheel、engine接口
class bM implements wheel,engine{

	@Override
	public void speed() {
		// TODO Auto-generated method stub
		System.out.println("我的时速可以达到240km/h");
		
	}

	@Override
	public void power() {
		// TODO Auto-generated method stub
		System.out.println("我的发动机功率最高可以达到10000w");
	}
	
}

public class Interface_study02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//接口的对象可以利用子类对象的向上转型进行实例化
		wheel w = new bM();
		engine e = new bM();
		w.speed();
		e.power();
		
		System.out.println("------------------");
		
		//实现接口的匿名类对象
		wheel w2 = new wheel() {
			@Override
			public void speed() {
				// TODO Auto-generated method stub
				System.out.println("我的时速可以达到300km/h----匿名类");
	    	}
		};
		w2.speed();
	}
}

结果截图:

Java 委托和接口 java接口协议_接口


分析:

  1. 上面的代码可以说明接口的应用。
  • 比方说生产一辆汽车,我们可以直接组装轮子、组装发动机等,而这些轮子和发动机都不是我生产的,而是通过进口的,我使用它,是不是要遵循它的“契约”呢。
  • 再打个比方:比如说德国生产的轮子最大时速只能为300km/h,你接过来用不可能就变成500km/h了吧
  1. 上面的匿名类也是一个类,它只不过是直接写在里面罢了,和普通的接口实现类没有什么大不同,有兴趣的可以去学习一下