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();
}