今天继续总结Java中接口的一些知识,手臂还不能长时间活动,只能慢慢总结学习,反正慢慢加油吧。

今天要学习接口,使用关键字interface定义接口。【接口中只能定义抽象方法,从JDK1.8之后引入default关键字开始提供默认实现】

        1.接口不能直接使用,必须有对应的实现类

        2.通过接口定义变量,使用具体类的实例进行调用

        3.引入接口的目的在于隔离实现

        4.使用接口而不是使用具体的类,则可以实现接口的多个具体实现类之间进行更换

接口的定义概念

在Java中不直接支持多继承,因为会出现调用的不确定性,所以Java将多继承机制进行改良,在Java 变成了多实现。【一个类可以实现多个接口,一个接口可以继承多个接口】

interface IA{}//接口中如果不使用default只能定义抽象方法,也可以不定义方法。
interface IB{}
interface IC extends IA,IB{}//语法正确,类不允许多重继承,接口允许多重继承,接口允许多重继承。
class A implements IA,IB{}//允许一个类实现多个接口

1.接口是一种特殊的抽象类,接口只能被abstract或者public修饰

2.没有构造器,没有属性,只能定义常量

3.可以包含抽象方法,也可以没有抽象方法。

抽象方法必须在实现类中提供实现

interface IA{}//定义接口

class AImpl implements IA{}//实现类

最佳编程实践

        允许一个类实现多个接口,但是每个接口的抽象方法都必须提供实现,否则是抽象类。提供的方法可以是继承。

1.首先通过接口定义调用的规范

2.然后使用抽象类实现接口,其中定义公共实现

3.最后定义子类继承抽象类,实现所有抽象方法

iterface A{
    public void p1();
}
iterface B{
    public void p2();
}
interface C extends A,B{}//允许接口多重继承,但不允许类多继承

class D{
    public void abc(){}
}
class T extends D implements C{
    public void p1(){}
    public void p2(){}
}
D d=new T();这里只能调用abc方法,如果使用其他方法则需要进行类型转换 
A a=new T(;这里只能调用A接口中声明的方法p1
B b=new T();这里只能调用B接口中声明的方法p2
T t=new T();可以调用所有方法

语法规则

        1.如果定义public接口,则规则和定义public类一致,要求接口名称和文件名称一致

        2.外部的接口只能使用public、默认这两个范围限定词;如果定义内部接口则可以使用4大范围限定词

         3.接口中不能定义构造器,不能定义非静态代码块

        4.接口中没有属性,只能定义常量,它提供一些常量,实现它的类可以共享这些常量

         5.接口可以给出访问控制符,用public修饰的是公共接口,到处可见;如果定义接口没有范围限定词,则只能在同包中访问

        6.在接口中不能定义静态块static(,但是可以定义静态方法。静态方法必须有实现,没有抽象静态方法的概念

接口不能被实例化,只能通过实现类所实现,但是可以用于声明变量的类型。

接口 变量名=new 实现接口类();

接口的特殊特征

1.一个类只能有一个父类

2.一个类可以实现多个接口

3.一个接口可以继承多个接口

接口的作用

1.统一访问

2.解耦(通过接口可以隔离具体实现)

接口的使用

        一般使用接口隔离具体实现,可以将类之间的相互依赖变为类对接口的依赖。例如出差类和会飞的东西是通过会飞的接口进行隔离,这样不管出差类需要修改或者会飞的东西需要修改,都不会相互影响。

        如果一组相关的类中有公共的方法和特殊的方法,可以使用抽象类,在抽象类中固化公共的方法,而无需具体子类重复实现;但是在抽象类中无法实现的方法可以延迟到子类中再实现。例如排序器BubbleSorter,其中抽象类BubbleSorter固化了所使用的冒泡排序算法,而将无法实现的bigger比较算法延迟到BubbleSorter的子类PigSorter中实现,同时PigSorter中也不需要重新定义排序算法。

        最佳软件开发实践:先定义接口规范调用方法,在使用抽象类实现接口定义公共方法,最后再定义具体子类实现所有的方法。