接口是抽象类的更进一步。抽象类可以包含非抽象方法和字段,但接口当中包含的方法均是由抽象方法以及被static final 修饰的静态常量。
语法规则
接口的关键字为 interface,如下代码所示:
interface IPaint{
public static final int A = 10;
public abstract void draw();
}
关于接口当中的静态常量必须进行初始化。另外,其中的public,static,final关键字都可以被省略,即 int A = 10; 。接口当中的方法一定为抽象方法,一定被 public 所修饰。在接口当中,方法尽量保持简洁,即: void draw(); 。接口是不能够进行实例化的,能够通过普通类通过 implements 关键字来实现这个接口。如下代码所示:
interface IPaint{
int A = 10;
void draw();
}
class Red implements IPaint{
public Red(){}
@override
public void draw(){
System.out.println("涂红色");
}
}
public class JavaTest01{
public static void main(String[] args){
IPaint paint = new Red();
paint.draw();
}
}
---------------------------------
输出结果:
涂红色
实现多个接口
在java当中只支持单继承,即一个类只能拥有继承一个父类,但是可以同时实现多个接口,这样就能够达到多继承的效果。
先通过类来表示一组动物:
class Animal{
public String name;
public Animal(String name){
this.name = name;
}
}
在提供一组接口,分别表示”会飞的“、”会游泳的“、”会跳的“。
interface Flying{
void fly();
}
interface Jumping{
void jump();
}
interface Swimming{
void swim();
}
对于两栖动物青蛙来说,即能跳,也能游。
class Frog extends Animal implements Running,Swimming{
public Frog(String name){
super(name);
}
public void jump(){
System.out.println(this.name + "正在往前跳");
}
public void swim(){
System.out.println(this.name + "正在水里游泳");
}
}
对于鱼儿来说,只能游泳
class Fish extends Animal implements Swimming{
public Fish(String name){
super(name);
}
public void swim(){
System.out.println(this.name + "用尾巴在游泳");
}
}
对于上述代码就能展现出Java面向对象编程的最常见的用法:一个类继承一个父类,同时实现了多个接口。不难看出,集成主要表达的含义是 is - a 的关系,而接口所表达的为 具有何种特性。
使用接口之后,就能够让程序员忘记 类型,类的使用者就不必关注具体类型,而是只关注某个类是否具备某种特性。
接口间的继承
接口可以继承一个接口,达到复用的效果,接口和接口之间是使用extends关键字的。
interface Running{
void run();
}
interface Swimming{
void swim();
}
//对于两栖动物来说,即能跑也能游泳
interface Amphibious extends Running,Swimming{
}
class Frog implements Amphibious{
public void run(){
Systemout.println("青蛙用双腿在跳");
}
public void swim(){
System.out.printl("青蛙会游泳");
}
}
通过接口继承创建的一个新的接口 Amphibious 表示为两栖动物,此时Frog 就需要具体实现 run() 方法和 swim() 方法。
总结
抽象类和接口都是Java 中多态的常见使用方式。
核心区别:抽象类中可以包含普通方法和普通字段,这样的普通方法和总段可以被子类直接使用,而接口中只有抽象方法,子类必须重写所有抽象方法。
区别 | 抽象类(abstract) | 接口(interface) | |
---|---|---|---|
1 | 结构组成 | 普通类+抽象方法 | 抽象方法+静态常量 |
2 | 权限 | 各种权限 | public |
3 | 子类使用 | 使用extends关键字继承抽象类 | 使用implements关键字实现接口 |
4 | 关系 | 一个抽象类可以实现若干个接口 | 接口不能继承抽象类,但是接口可以使用extends关键字继承多个接口 |
5 | 子类限制 | 一个子类只能继承一个抽象类 | 一个子类可以实现多个接口} |
实际上,接口要比抽象类更常见。