接口的概述
概述与特点
概述:是一个特殊的抽象类;只是接口没有继承关系
接口的主要作用是在实现多态上
接口中的方法都是抽象方法(除非有特殊设定),更形象的去使用多态
语法设计: 接口与实现类的关系
interface 接口名{
抽象方法;
}
class 实现类 implements 接口{
重写抽象方法;
}
与抽象类的异同
相同点:
都可以生成class文件
都不能具体化(不能实例化对象)
都可以调用Object的所有方法(继承性-Object是老祖宗)
都可以作为引用类型(多态应用)
不同点:
接口中定义的属性是公开的静态常量 默认加:public static final
接口中定义的方法为公开的抽象方法 默认加:public abstract
接口中不能有构造方法,没有静态代码块和动态代码块
应用场景
接口与抽象类类似,就是为多态而生;在应用场景上也是一样的
直接多态
public class caogao {
public static void main(String[] args) {
//实例化对象
Cat cat = new Cat();
cat.eat();
}
}
//创建一个接口
interface Eat{
void eat();
}
//创建类实现接口
class Cat implements Eat{
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
传参多态
接口使用传参多态的场景:将接口当成标准或规范或约定
接口实现多态的好处:可扩展性,维护性更强;解耦合(只需一个接口引用);更容易更换具体实现;容易模块分离
public class caogao {
public static void main(String[] args) {
//实例化对象
Computer computer = new Computer();
computer.connect(new Mouse());
computer.connect(new Keyboard());
}
}
//创建一个接口
interface USB{
void run();
}
//创建类实现接口
class Mouse implements USB{
@Override
public void run() {
System.out.println("鼠标正在运行");
}
}
class Keyboard implements USB{
@Override
public void run() {
System.out.println("键盘正在运行");
}
}
//创建第三方类
class Computer{
public void connect (USB usb) {
usb.run();
}
}
返回值多态
//返回值多态案例:
//我要购买usb标准的设备: 1.鼠标 2.硬盘
//分析:类-Person Mouse,硬盘 接口:usb标准 方法:购买,使用
interface USB{
int MOUSE = 1; //状态值--接口常量
int DISK = 2;
void use(); //usb设备使用的方法
}
class Mouse implements USB{
@Override
public void use() {
System.out.println("usb标准的鼠标正在使用...");
}
}
class Disk implements USB{
@Override
public void use() {
System.out.println("usb标准的硬盘正在使用");
}
}
class Person{
public USB bug(int flag) {
if(flag==USB.MOUSE) {
return new Mouse();
}else if(flag==USB.DISK) {
return new Disk();
}else {
return null;
}
}
}
public class Test1 {
public static void main(String[] args) {
Person p = new Person();
USB usb = p.bug(USB.MOUSE);
if(usb!=null) {
usb.use();
}
}
}