接口

本文详细介绍了Java接口的概念、语法、特点以及接口在多态、规范、关系等方面的应用。通过案例展示了接口如何实现多态,如何作为参数和返回值,以及接口的宏观意义,如标准和规范。同时,探讨了接口回调原理和接口带来的好处,如降低耦合度、提高代码可读性和灵活性。
摘要由CSDN通过智能技术生成

一、接口语法


1.1 基本使用

概念:接口相当于特殊的抽象类,定义方式、组成部分与抽象类类似。使用interface关键字定义接口。

特点:

  • 没有构造方法,不能创建对象。
  • 只能定义:公开静态常量、公开抽象方法。

案例演示:自定义接口。

public interface MyInterface {
	//公开的静态常量
	//public static final String NAME="接口1";
	String NAME="接口1";
	//公开的抽象方法
	//public abstract void method1();
	void method();	
}

实现类:

public class Impl implements MyInterface1{

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

}

测试类:

public class TestInterface {
	public static void main(String[] args) {
		//new MyInterface1();
		MyInterface1 myInterface1=new Impl();
		myInterface1.method();
	}
}

1.2 和抽象类区别

相同点:

  • 可编译成字节码文件。
  • 不能创建对象。
  • 可以作为引用类型。
  • 具备Object类中所定义的方法。

不同点:

  • 所有属性都是公开静态常量,隐式使用public static final修饰。
  • 所有方法都是公开抽象方法,隐式使用public abstract修饰。
  • 没有构造方法、动态代码块、静态代码块。

二、微观接口【重点


微观概念:接口是一种能力和约定。

  • 接口的定义:代表了某种能力。
  • 方法的定义:能力的具体要求。

经验:

  • Java为单继承,当父类的方法种类无法满足子类需求时,可实现接口扩充子类能力。
  • 接口支持多实现,可为类扩充多种能力。

案例演示:实现类实现多个接口。

public interface Flyable {
	void fly();
}

public interface Fireable {
	void fire();
}

实现类:Person

public class Person implements Flyable,Fireable{
	String name;
	int age;
	public Person() {
		// TODO Auto-generated constructor stub
	}
	
	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	public void eat() {
		System.out.println(name+"吃东西...");
	}
	public void sleep() {
		System.out.println(name+"睡了...");
	}
	@Override
	public void fly() {
		System.out.println(name+"开始飞了...");
	}

	@Override
	public void fire() {
		System.out.println(name+"可以喷火了...");
	}
}

测试类:

public class TestPerson1 {
	public static void main(String[] args) {
		Person xiaoming=new Person("小明",20);
		xiaoming.fly();
		xiaoming.fire();
		
	}
}

三、接口规范


  • 任何类在实现接口时,必须实现接口中所有的抽象方法,否则此类为抽象类。
  • 实现接口中的抽象方法时,访问修饰符必须是public。
  • 同父类一样,接口也可声明为引用,并指向实现类对象。

注:

public class TestPerson2 {
	public static void main(String[] args) {
		
		Flyable flyable=new Person("小张",22);
		flyable.fly();


		Fireable fireable=new Person("小李", 15);
		fireable.fire();
	}
}

四、接口实现多态


接口实现多态:使用接口作为方法的参数和返回值,实际赋值实现类对象实现多态。

案例演示:

public interface Runnable{
	//跑
    void run();
}
public interface Swimable {
	//游泳
    void swim();
}

public abstract class Animal {
	public void eat() {
		System.out.println("吃");
	}
	public void sleep() {
		System.out.println("睡");
	}
}
public class Dog extends Animal implements Runnable,Swimable{
	
	public void shout() {
		System.out.println("狗狗开始叫...");
	}

	@Override
	public void swim() {
		System.out.println("狗狗游泳...");
	}

	@Override
	public void run() {
		System.out.println("狗狗跑步...");
	}
}
public class TestDog {
	public static void main(String[] args) {
		Dog wangcai=new Dog();
		Animal a=wangcai;
		Runnable runnable=wangcai;
		Swimable swimable=wangcai;
		
		//---------调用方法-----------
        wangcai.shout();
        a.eat();
        a.sleep();
		runnable.run();
		swimable.swim();
		
	}
}

五、接口常见关系


类与类:

  • 单继承
  • extends 父类名称

类与接口:

  • 多实现
  • implements 接口名称1 , 接口名称2 , 接口名称n

接口与接口:

  • 多继承
  • extends 父接口1 , 父接口2 , 父接口n

案例演示:接口多继承。

public interface Runnable extends Serializable ,Cloneable{
	//跑
    void run();
}

六、常量接口


将多个常用于表示状态或固定值的变量,以静态常量的形式定义在接口中统一管理,提高代码可读性。

public interface ConstInterface {
	String CONST1 = "aaa";
	String CONST2 = "bbb";
	String CONST3 = "ccc";
}
public class TestConstInterface {
	public static void main(String[] args) {
		if(ConstInterface.CONST1.equals("aaa")) {
			System.out.println();
		}
	}
}

七、宏观接口【重点


7.1 概念

宏观概念:接口是一种标准、规范。

| 生活中接口 |
| :-------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zOmOUzgy-1631543581875)(Pictures\002.png)] |

案例演示:

public interface Usb {
	void service();
}

public class Mouse implements Usb{

	@Override
	public void service() {
		System.out.println("鼠标连接电脑成功开始工作了...");
	}

}
public class Upan implements Usb{

	@Override
	public void service() {
		System.out.println("Upan连接电脑成功,开始工作...");
	}

}
public class Computer {
	Usb usb1;
	Usb usb2;
	Usb usb3;
	
	public void run() {
		System.out.println("电脑开始工作...");
		if(usb1!=null) {
			usb1.service();
		}
		if(usb2!=null) {
			usb2.service();
		}
		if(usb3!=null) {
			usb3.service();
		}
	}
}

public class Computer {
	Usb usb1;
	Usb usb2;
	Usb usb3;
	
	public void run() {
		System.out.println("电脑开始工作...");
		if(usb1!=null) {
			usb1.service();
		}
		if(usb2!=null) {
			usb2.service();
		}
		if(usb3!=null) {
			usb3.service();
		}
	}
}


```java
public class Test {
	public static void main(String[] args) {
		Computer lenovo=new Computer();
		
		Usb mouse=new Mouse();
		Usb fan=new Fan();
		Usb jinshidun=new Upan();
		
		//把usb设备连接到电脑上
		lenovo.usb1=fan;
		lenovo.usb2=mouse;
		lenovo.usb3=jinshidun;
        
		lenovo.run();
	}
}
7.2 回调原理

接口回调:先有接口的使用者,后有接口的实现者。

| 接口回调 |
| :-------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yQdPQJKZ-1631543581878)(Pictures\003.png)] |

7.3 接口好处
  • 程序的耦合度降低。
  • 更自然的使用多态。
  • 设计与实现完全分离。
  • 更容易搭建程序框架。
  • 更容易更换具体实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值