10.6 接口

接口是一种比抽象类更抽象的一种类型,这是一个接口的代码:
public interface IClassDao{
    public void saveOrUpdate(Clazz clazz);
    public List queryAvalibleClazz();
    public Clazz queryClassById(Integer id);
}

抽象
接口
属性
可以没有属性,也可以有属性
就算没有static关键字,属性一定是静态属性,不能是private或者protected,而且一定是常量final(也就是只能赋值一次无法再更改)
方法
抽象方法需要写关键字abstract
所有方法只能是public,方法前不需要关键字abstract,如果有实现的方法必定是公开的静态方法
类型
抽象类还是类,关键字还是class
接口不是类,关键字是interface
语义
继承关系属于“是一种”关系,例如鸟是一个抽象类,鹦鹉继承了鸟,那么“鹦鹉'是一种'鸟”
实现接口属于“拥有XXX功能”的关系。例如“可飞的”是一个接口,而飞机实现了这个接口,那么“飞机'拥有了可飞的功能'”

java只能继承一个父类,不支持多继承
接口可以同时实现多个,例如“可飞行的”,“可充电的”
一开始,可以这么去理解接口:抽象类尽管抽象, 它还是一个完整的“东西”,接口不是一个完整的“东西”,它是部分功能的集合,例如“可走路的”,“可以吃的”,“可编码的”,“可序列化的”等等。
在开始接触接口这个概念的时候,我们可以粗略的这样区分:类是名词,接口是形容词或副词!熟悉了接口后,就算是名词也可以用接口来表达了。
现在我们就从逻辑上设计一个接口“可飞的“ 这个接口(命名为IFlyable)是定义飞行这个功能的,所以至少应该有三个方法
1.起飞,我们命名为launch
2.飞行,我们命名为fly
3.降落,命名为land
用代码表达可能是这个样子的:
public interface IFlyable{
    public void launch();
    public void fly();
    public void land();
}
下面是新建一个接口的方法,新建的时候选择interface:
 然后输入接口的名字,接口通常是大写字母I开头
然后点击确定就可以啦
然后写上上面的三个方法:launch、fly、land。

哪个类实现了这个接口,这个类就要实现这三个方法
例如Bird实现了这个接口,注意,实现是implements关键字,不是extends:
public class Bird implements IFlyable{
    @Override 
    public void launch(){
        // TODO Auto-generated method stub
    }
    @Override 
    public void fly(){
        // TODO Auto-generated method stub
    }
    @Override 
    public void land(){
        // TODO Auto-generated method stub
    }
}

最后,接口也是可以继承的!当然,继承和被继承的都必须是接口,例如:
public interface IHighSpeedFly extends IFlyable{
    public void accelerate();
}