接口
接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。
接口的特点
接口用关键字interface
表示
类实现接口用implements
表示
class 类名 implements 接口名 {}
|
接口不能实例化,但是可以被实现。
一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。
(在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。
)
接口成员特点
- 成员变量;只能是常量,并且是静态的。
默认修饰符:public static final
- 接口没有构造方法。
- 成员方法只能是抽象方法。
默认修饰符:public abstract
抽象类和接口的区别
成员区别
抽象类
成员变量:可以变量,也可以常量
构造方法:有
成员方法:可以抽象,也可以非抽象
接口
成员变量:只可以常量
成员方法:只可以抽象
关系区别
类与类之间的关系
继承关系,只能单继承,可以多层继承。
class Son extends Object {
}
|
类与接口之间的关系
实现关系,可以单实现,也可以多实现。
并且还可以在继承一个类的同时实现多个接口。
interface Father { public void show(); }
interface Mother { public void show2(); }
class Son extends Object implements Father,Mother { public void show() { System.out.println("show son"); } public void show2() { System.out.println("show2 son"); } }
|
接口与接口之间的关系
继承关系,可以单继承,也可以多继承。
interface Father { public void show(); }
interface Mother { public void show2(); }
interface Sister extends Father,Mother {
}
|
设计理念的区别
抽象类 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。
接口 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。
示例
猫狗案例,加入跳高的额外功能
interface Jumpping { public void jump(); }
abstract Animal{ private String name; private int age; public Animal() {} public Animal(String name,int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public abstract void eat(); public void sleep(){ System.out.println("睡觉"); } }
class Cat extends Animal { public Cat(){} public Cat(String name,int age) { super(name,age); } public void eat() { System.out.println("猫吃鱼"); } }
class Dog extends Animal { public Dog(){} public Dog(String name,int age) { super(name,age); } public void eat() { System.out.println("狗吃肉"); } }
class JumpCat extends Cat implements Jumpping { public JumpCat() {} public JumpCat(String name,int age) { super(name,age); }
public void jump() { System.out.println("跳高猫"); } }
class JumpDog extends Dog implements Jumpping { public JumpDog() {} public JumpDog(String name,int age) { super(name,age); }
public void jump() { System.out.println("跳高狗"); } }
|