接口定义规范 (利用方法实现这种规范)
用程序描述USB接口
1.USB接口本身没有实现任何接口
2.USB接口规定了数据传输的要求
3.USB接口可以被多种USB设备实现
步骤:
1.编写USB接口----根据需求写方法
2.实现USB接口----实现所有方法
3.使用USB接口----用多态的方式使用 :
USB usb=new KeyBoard(); //向上转型
USB usb=new Mouse();//向上转型
public interface USB {
/*
USB接口只提供服务 接口定义了标准/规范
返回值类型 方法名定义之后不再修改 子类实现接口即可
默认提供public abstract实现
*/
void service();
}
public class Mouse implements USB {
/*
USB接口的Mouse
*/
@Override
public void service() {
System.out.println("鼠标按照USB接口制定的标准,接入了USB接口,开始工作");
}
}
public class KeyBoard implements USB {
/*
USB接口的键盘
*/
@Override
public void service() {
System.out.println("键盘按照USB接口制定的标准,接入了USB接口,开始工作");
}
}
public class UsbTest {
public static void main(String[] args) {
//使用多态的方式创建对象
USB usb=new KeyBoard();
usb.service();
USB usb1=new Mouse();
usb1.service();
}
}
接口定义能力(利用方法实现这种能力)
面向接口编程
关心实现类有何能力 而不必关心实现类实现这种能力的细节
面向接口的约定而不考虑接口的具体实现
防盗门功能的实现:
防盗门是一个门 继承(is a 的关系)
门有两个抽象方法: 开门 关门;
防盗门有一个锁有以下功能 接口(has a的关系)
1.上锁
2.关锁
//接口
public interface Locker {
//不能使用 static修饰方法 但可以使用static修饰变量
void closeLocker();//接口的第一个能力
void openLocker();//接口的第二个能力
}
//抽象类
public abstract class Door {
public static final int age=18;
//父类 不能使用static修饰 static修饰的方法可以被继承但不能被重写
public abstract void Close();
public abstract void Open();
}
public class NoThiefDoor extends Door implements Locker {
/* 实现类继承父类的同时也可以实现接口
防盗门有四个功能 开门 关门 上锁 解锁
继承父类:可以有开门 关门的功能
实现接口:可以有开锁 关锁的功能
*/
@Override
public void Close() {
System.out.println("拉门~门关闭了");
}
@Override
public void Open() {
System.out.println("推门~门打开了");
}
@Override
public void closeLocker() {
System.out.println("关闭门 自动上锁");
}
@Override
public void openLocker() {
System.out.println("输入密码,门打开了");
}
}
public class TestDoor {
public static void main(String[] args) {
NoThiefDoor noThiefDoor=new NoThiefDoor();
noThiefDoor.Open();
noThiefDoor.Close();
System.out.println("主人回来了~~~");
noThiefDoor.openLocker();
noThiefDoor.closeLocker();
}
}
接口和抽象类的区别:
相同点:
1.代表系统的抽象层
2.都不能被实例化
3.都能包含抽象方法 用于描述系统提供的服务,不必提供具体的实现
不同点:
1.抽象类当中可以为部分方法提供默认实现,可以有代码块,实例变量 实例方法,构造方法等,接口中只能由抽象方法 变量是静态常量(static final修饰)
2.抽象类便于代码复用性,接口便于代码维护
3.一个类只能继承一个直接的父类,但可以实现多个接口
接口的使用原则
1.接口做系统与外界交互的接口
2.接口提供服务接口本身一旦制定 就不允许随意更改
3.抽象类可完成部分功能的实现 还有部分功能可作为系统的扩展
public interface MyInterface{
public MyInterface(); ❌ 接口中不能有构造方法
public void method1();
public void method2(){};❌ 不能有方法体
private void method3();❌ 访问权限符只能是public
void method4(); 省略了 public abstract
int method5();
int TYPE=5; 省略了 static final
}
练习题
public interface CPU {
public static final String brand="Intel";
public static final Double ZhuPin=3.8;
public abstract void cpu();
}
public interface HardDisk {
public static final int MemoryCapacity=4;
public abstract int MemoryCapacity();
}
public interface EMS {
public static final int HardCapacity=3000;
public abstract int HardCapacity();
}
public class Computer implements CPU,EMS,HardDisk {
public void print(){
System.out.println("计算机的信息如下:");
}
@Override
public void cpu() {
System.out.println("CPU的品牌是:"+brand+","+"主频是:"+ZhuPin+"GHZ");
}
@Override
public int HardCapacity() {
System.out.println("硬盘的容量是:"+HardCapacity+"GB");
return HardCapacity;
}
@Override
public int MemoryCapacity() {
System.out.println("内存容量是:"+MemoryCapacity+"GB");
return MemoryCapacity;
}
}
public class Test {
public static void main(String[] args) {
Computer computer=new Computer();
computer.print();
computer.cpu();
computer.HardCapacity();
computer.MemoryCapacity();
}
}