接口和抽象类的区别
no | 区别 | 抽象类 | 接口 |
---|---|---|---|
1 | 定义关键字 | abstract | interface |
2 | 成员组成 | 常量、变量、普通方法、抽象方法、构造方法 | 全局常量、抽象方法 |
3 | 访问权限 | 四种权限 | public |
4 | 关系 | c抽象类可以实现接口 | 接口不能继承抽象类 |
5 | 继承关键字 | extends | implements |
6 | 设计模式 | 模板设计模式、适配器设计模式 | 工厂设计模式、代理设计模式 |
7 | 局限 | 一个子类只能继承一个父类,(单继承局限) | 可以一个子类实现多个接口(无局限) |
8 | 抽象方法是否可以省略abstract | 不可以省略 | 可以省略,默认就是抽象方法 |
9 | 是否有构造 | 有构造方法 | 无构造 |
接口的真正意义
- 抽象类的出现就是为了统一标准,但是有单继承局限。
- 接口的出现是为了统一标准,同时没有单继承局限。 统一开发标准
一般来讲:
package com.baidu.dao.demo;
public class Mouse {
public void click(){
System.out.println("鼠标:点击桌面");
}
}
package com.baidu.dao.demo;
public class Printer {
public void print(){
System.out.println("打印机:打印材料");
}
}
package com.baidu.dao.demo;
public class Keyboard {
public void input(){
System.out.println("键盘:输入文字");
}
}
package com.baidu.dao.demo;
public class Computer {
public static void main(String[] args) {
useUsb(new Keyboard());
useUsb(new Mouse());
useUsb(new Printer());
}
public static void useUsb(Printer printer){
printer.print();
}
public static void useUsb(Keyboard board){
board.input();
}
public static void useUsb(Mouse mouse){
mouse.click();
}
}
要统一电脑以及与电脑插口有关设备的生产标准。让一个USB插口可以连接不同的设备。
package com.baidu.dao.demo;
public interface IDevice {
public void run();
}
package com.baidu.dao.demo;
public class Mouse implements IDevice {
public void run(){
System.out.println("鼠标:点击桌面");
}
}
package com.baidu.dao.demo;
public class Printer implements IDevice {
public void run(){
System.out.println("打印机:打印材料");
}
}
package com.baidu.dao.demo;
public class Keyboard implements IDevice{
public void run(){
System.out.println("键盘:输入文字");
}
}
package com.baidu.dao.demo;
public class Computer {
public static void main(String[] args) {
useUsb(new Keyboard());
useUsb(new Mouse());
useUsb(new Printer());
}
public static void useUsb(IDevice device){
device.run();
}
}
输出:
键盘:输入文字
鼠标:点击桌面
打印机:打印材料
以上使用接口统一了开发标准,实现多种设备对接的操作简单,可以使用于不同的设备。