接口interface
接口的引入:
生活中的接口是指某些企业和组织等制定的一种约定或标准(USB)
USB风扇按照电脑产商的USB接口设计生产就可以使得电脑具备风扇散热的功能。
USB鼠标按照电脑产商的USB接口设计生产就可以使得电脑具备鼠标移动的功能。
U盘按照电脑产商的USB接口设计生产就可以使得电脑具备U盘存储的功能。
接口
1.接口是一种标准,是一种规范,是一种约定
2.接口可以扩展功能
3.接口是灵活的,可以即插即拔
4.接口由继承者来实现
接口的概念:
从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和抽象方法的定义,而没有变量和方法的实现。
接口的格式:
格式
public interface 接口名{
//常量
//抽象方法
}
接口的实现类格式:
public 类名 implements 接口{
// 实现接口的方法
//普通方法
}
接口的特点:
1.接口使用interface修饰
2.接口是常量和抽象方法的集合
常量: 默认使用 public static final
方法: 默认使用 public abstract修饰
3.在JDK1.8以后不仅仅只有常量和抽象方法,还有默认方法和静态方法
默认方法用来直接给子类使用,如果子类想重写也可以自行根据需求重写,不会强制重写
静态方法用来直接通过接口名访问
4.接口不能够实例化
5.接口如果想要实例化–利用多态
6.接口的实现类特点:
a.如果一个类想要实现一个接口就必须实现接口中定义的所有抽象方法
b.如果一个类不想实现接口中的抽象方法,那么实现类也升级为接口
7.接口是一种规范
8.接口可以用来扩展功能
9.接口是灵活的
10.接口是由继承者来实现
11.接口/类之间的关系
类和类 单继承 不可以实现
类和接口 不可以继承 多实现
接口和接口 多继承 不可以实现
12.接口和继承的区别?
什么时候使用接口? 什么时候使用继承?
大部分情况下使用接口,因为接口灵活,主要是降低了耦合性,并且接口是一种规范
继承主要体现在代码的抽取以及多态的必要条件
思想:
1.开闭原则
2.高内聚,低耦合
3.面向接口编程
举例1代码如下所示:
public class InterfaceDemo01 {
public static void main(String[] args) {
// System.out.println(Inter.num);
// Inter.num = 200;
// Inter.staticMethod();
// Inter inter = new Inter();
// 利用多态
Inter inter = new InterImpl();
}
}
interface Inter {
// int num = 100;
public static final int NUM = 100;
void show();
void method();
// 默认方法
public default void defaultMethod() {
System.out.println("Inter.defaultMethod()");
}
// 静态方法
public static void staticMethod() {
System.out.println("Inter.staticMethod()");
}
}
class InterImpl implements Inter {
@Override
public void show() {
System.out.println("InterImpl.show()");
}
@Override
public void method() {
System.out.println("InterImpl.method()");
}
}
interface InterSon extends Inter {
}
举例2代码如下所示:
public class InterfaceDemo02 {
interface IPerson {
// 返回值类型 参数列表 方法名
void setName(String name);
String getName();
void setAge(int age);
int getAge();
}
class LaoWang implements IPerson{
public String name;
public int age;
public void sing() {
System.out.println("唱国歌");
}
public void dance() {
System.out.println("跳肚皮舞");
}
@Override
public void setName(String name) {
this.name = name;
}
@Override
public String getName() {
return name;
}
@Override
public void setAge(int age) {
this.age = age;
}
@Override
public int getAge() {
return age;
}
}
class XiaoWang extends LaoWang implements ISxt {
@Override
public void sing() {
System.out.println("唱 HelloWorld!!!");
}
@Override
public void javase() {
System.out.println("学会了JavaSE");
}
@Override
public void javaee() {
System.out.println("学会了JavaEE");
}
@Override
public void andoroid() {
System.out.println("学会了Android");
}
@Override
public void ps() {
System.out.println("学会了PS");
}
}
interface ISxt extends IJava, IAndroid, IUI{
}
interface IJava {
void javase();
void javaee();
}
interface IAndroid {
void javase();
void andoroid();
}
interface IUI {
void ps();
}
接口和抽象类的区别:
序号 | 比较点 | 抽象类 | 接口 |
---|---|---|---|
1 | 定义 | 用abstract类修饰 | 用interface修饰 |
2 | 组成 | 抽象方法、普通方法、构造方法、成员变量、常量 | 抽象方法、静态常量 |
3 | 使用 | 子类继承(extends) | 实现类实现(implements) |
4 | 关系 | 抽象类可以实现接口 | 接口不能继承抽象类 |
5 | 对象 | 都是通过对象的多态性来实现的 | 同左 |
6 | 局限 | 不能多继承、不能实例化 | 可以多继承,不能实例化 |
7 | 选择 | 建议选择接口、避免单继承 | 同左 |
8 | 实际 | 模板 | 标准 |