注意:本作品前三个代码都是相连的
接口的概念
微观概念:接口是一种能力(接口的实现类具有了某种能力)
1.接口的定义:代表了某种能力。
2.方法的定义:能力的具体要求。
经验:java为单继承,当父类的方法种类无法满足子类的需求时,可以实现接口扩充子类。
接口支持多实现,可为类扩充多种能力。语法:implements 接口名,接口名,接口名....{}
接口的语法:public interface 接口名{
}
1.接口相当于特殊的抽象类,定义方式,组成部分与抽象类类似;
2.接口没有构造方法,不能创建对象,但可以用来定义变量;
3.只能定义公开的静态常量,公开的抽象方法。
package interface1;
public interface MyInterface1 {
//公开的静态常量
public static final String NAME = "接口1";//public static final 可省略,默认会添加
//公开的抽象方法
public abstract void method1();//public abstract 可省略,默认会添加
}
接口的使用需要一个实现类
语法:public class 类名 implement 接口名{
}
package interface1;(承接上述代码)
public class Impl implements MyInterface1{//实现类
@Override
public void method1() {//类实现接口,必须覆盖接口中的所有方法
// TODO 自动生成的方法存根
System.out.println("method");
}
使用方法(承接上述两个代码)
通过接口调用接口的方法(实际上是实现类的方法,接口中为公开的抽象方法,实现类重写了该方法)
package interface1;
public class TestInterface {//测试类
public static void main(String[] args) {
MyInterface1 myinterface1 = new Impl();//看这里,多态的形式,引用类型
myinterface1.method1();//还有这里
}
}
接口与抽象类的区别
相同点:
1.可编译成字节码文件。
2.不能创建对象。
3.可以作为引用类型(见上述代码引用类型处)。
4.具备Object类中所定义的方法(也就是说可以通过接口调用Object中的方法)
不同点:
1.接口所有的属性都是公开静态常量,默认使用public static final 修饰。
2.接口所有方法都是公开抽象方法,默认使用public abstract 修饰。
3.接口没有构造方法,静态和动态代码块。
接口的规范
1.任何类在实现接口时,必须实现接口中所有的抽象方法,否者此类为抽象类。
2.实现接口中的抽象方法时,访问修饰符必须是public。
接口引用
同父类一样,接口也可声明为引用,并指向实现类对象。(可以使用接口创建变量,不能创建对象)
注意:
1.仅可调用接口中声明的方法,不可调用实现类中独有的方法(就和多态一样的)
2.可强转回实现类本身类型,进行独有方法调用。
3.【特殊:通过接口可调用Object中公开的方法。】
接口的多态
见上图蓝色框代码,多种不同类型的引用指向同一个对象的时候,表示看待对象的视角不同。
1.这里的Dog myDog:将狗当狗看
2.Animal a:将狗当动物看
3.Runnable r:将狗当会跑的东西看
4.Swimmable s:将狗当做会游泳的东西看
不同引用所能看到的对象范围不同,只能调用自身类型所声明的部分。
常见关系:
【类与类】
单继承
extends 父类名称
【类与接口】
多实现
implements 接口名1,接口名2,接口名n
【接口与接口】
多继承
extends 父接口1,父接口2,父接口n
常量接口,标记接口
常量接口将多个常用于表示状态或固定值的变量,以静态常量的形式定义在接口中统一管理,提高代码的可读性
标记接口中没有包含任意成员,仅仅用作标记
1.Serializable
2.Cloneable
什么是接口
1.宏观概念:接口是一种标准。
接口的回调
先有接口的使用者,后有接口的实现者。
比如下面代码,电脑是使用者,它的调用者可以是下面的三种物体,也可以不是下面的几种物体。三个usb接口可以对接不同的物体。无论是否对接,三个usb接口都存在(看自己电脑就知道了)
package com.mh.interface_5;
//测试类
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();//使用接口创建对象
lenovo.usb1=mouse;
lenovo.usb2=fan;
lenovo.usb3=jinshidun;
lenovo.run();
}
}
//接口的使用者 电脑
public class Computer {
Usb usb1;//usb接口
Usb usb2;//usb接口
Usb usb3;//usb接口
public void run() {
System.out.println("电脑开始工作");
if(usb1!=null){
usb1.service();
}
if(usb2!=null){
usb2.service();
}
if(usb3!=null){
usb3.service();
}
}
}
//调用者鼠标
public class Mouse implements Usb{
@Override
public void service() {
System.out.println("鼠标连接成功");
}
}
//调用者风扇
public class Fan implements Usb{
@Override
public void service() {
System.out.println("风扇连接电脑成功");
}
}
//调用者upan
public class Upan implements Usb{
@Override
public void service() {
System.out.println("Upan连接电脑成功开始工作");
}
}
//接口Usb
public interface Usb {
void service();
}
创作不易,请多支持,如有不足,请指出