本篇学习接口,并区分接口与抽象类两者之间的异同点。上篇已经讲解了抽象类,有需要的小伙伴可以点链接康康
https://blog.csdn.net/m0_73107796/article/details/139863674
目录
1、 什么是接口
我们知道,Java不支持多重继承(一个类不支持继承多个类),但是,通过接口实现了比多重继承更强的功能。Java通过接口便处于不同层次的类甚至互不相关的类可以具有相同的行为·。
2、 接口定义格式
语法如下:
public interface 接口名称 {
// 抽象方法
public abstract void method1(); // public abstract 是固定搭配,可以不写
public void method2();
abstract void method3();
void method4();
// 注意:在接口中上述写法都是抽象方法,更推荐方式4,代码更简洁
}
小提示:
1. 创建接口时, 接口的命名一般以大写字母 I 开头.
2. 接口的命名一般使用 "形容词" 词性的单词.
3. 阿里编码规范中约定, 接口中的方法和属性不要加任何修饰符号, 保持代码的简洁性.
3、 接口的使用
接口不能直接使用,必须要一个“实现类”来实现“该接口”,并实现接口中的所有抽象方法。
public class 类名称 implements 接口名称 {
成员变量;
抽象方法;
}
注意:子类和父类之间是extends 继承关系,类与接口之间是 implements 实现关系。
现在来看看代码加强理解八
用笔记本电脑使用USB鼠标、USB键盘的例子:
1. USB接口:包含打开设备、关闭设备功能
2. 笔记本类:包含开机功能、关机功能、使用USB设备功能
3. 鼠标类:实现USB接口,并具备点击功能
4. 键盘类:实现USB接口,并具备输入功能
//定义USB接口
public interface USB {
void openDevice();
void closeDevice();
}
//鼠标类实现接口
public class Mouse implements USB{@Override
public void openDevice() {
System.out.println("开启鼠标");
}@Override
public void closeDevice() {
System.out.println("关闭鼠标");
}
public void click(){
System.out.println("点击鼠标");
}
}
//键盘类实现接口
public class KeyBoard implements USB{@Override
public void openDevice() {
System.out.println("打开键盘");
}@Override
public void closeDevice() {
System.out.println("关闭键盘");
}
public void input(){
System.out.println("敲键盘");
}
}
//定义计算机类,使用USB接口
public class Computer {
public void powerOn(){
System.out.println("打开计算机");
}
public void powOff(){
System.out.println("关闭计算机");
}
public void useDevice(USB usb){
usb.openDevice();
if(usb instanceof Mouse) {
Mouse mouse = (Mouse) usb;
mouse.click();
}
else if(usb instanceof KeyBoard){
KeyBoard keyBoard=(KeyBoard) usb;
keyBoard.input();
}
usb.closeDevice();
}
}
//测试类
public class Test {
public static void main(String[] args) {
Computer computer =new Computer();
computer.powerOn();//使用鼠标设备
computer.useDevice(new Mouse());//使用键盘设备
computer.useDevice(new KeyBoard());computer.powOff();
}
}
代码运行结果图
4、接口特性
1. 接口类型是一种引用类型,但是不能直接new接口的对象。(接口比抽象类还抽象哦,不能实例化对象)
2.接口默认所有方法的修饰为 public abstract(只能是public abstract)
5. 接口默认所有属性的修饰是 public static final
3. 接口中的方法是一般不在接口中实现的,要能由实现接口的类来实现,若要在接口中实现,需要在方法前加default或Static(不建议).
4. 重写接口中方法时,不能使用默认的访问权限
6.接口中不能有静态代码块和构造方法
7.接口中不能有普通方法.
8. 一个接口对应一个字节码文件,编译完成后字节码文件的后缀格式是.class
9. 如果类没有实现接口中的所有的抽象方法,则类必须设置为抽象类
10、接口间的继承用extends,接口可以达到多继承的目的
5、抽象类与接口的区别
抽象类和接口都是 Java 中多态的常见使用方式. 都需要重点掌握. 同时又要认清两者的区别(重要!!! 常见面试题).
核心区别: 抽象类中可以包含普通方法和普通字段, 这样的普通方法和字段可以被子类直接使用(不必重写), 而接口中不能包含普通方法, 子类必须重写所有的抽象方法.
继承表达的含义是 is-a语义,而接口表达的是有XXX特性。
No | 区别 | 抽象类(abstract) | 接口(interface) |
1 | 结构组成 | 抽象类+抽象方法 | 抽象方法+全局变量 |
2 | 权限 | 各种权限 | public |
3 | 子类使用 | 使用extends关键字继承抽象类 | 用implements关键字实现接口 |
4 | 关系 | 一个抽象类可以实现若干个接口 | 接口不能继承抽象类,但是可以用extends实现多个父类接口 |
5 | 子类限制 | 一个子类只能继承一个抽象类 | 一个子类可以实现多个接口 |
本篇类的接口和抽象类与接口区别学习到这里,是不是收获满满呢,如果觉得文章写的不错,留下小红心再走吧。后面一篇学习做图书管理系统!关注我,不要错过哦!~