概念
当一个抽象类中的方法都是抽象的时候,这时可以将抽象类用另一种形式定义和表示,那就是接口interface。
对于接口中常见的成员,而且这些成员都有固定的修饰符:
1.全局变量:public static final
2.抽象方法:public abstract
interface Demo
{
int NUM=4; //public static final int NUM=4;
void show1(); //public abstract void show1();
void show2(); //public abstract void show2();
}
接口成员都是公共权限。
类与类之间是继承关系,类与接口之间是实现关系。
接口不可以实例化,只能有实现了接口的子类并覆盖了接口中所有的抽象方法后,该子类才可以实例化。
否则,这个子类就是一个抽象类。
class DempImple implements /*实现*/Demo
{
public void show()
}
多实现
在Java中不直接支持多继承,因为会出现调用的不确定性.所以Java将多继承机制进行改良,在java中变成了多实现.
一个类可以实现多个接口
package com.monfolld;
interface A{
public void show();
}
interface z{
public int add(int a,int b);
}
class Test implements A,z{
@Override //父类接口继承过来
public void show() {
}
@Override
public int add(int a, int b) {
return a+b;
}
}
public class InterfaceDemo {
public static void main(String[] args){
Test t=new Test();
t.show();
}
}
一个类在继承另一个类的同时,还可以实现多个接口
class Q{
public void method()
{}
}
class Test2 extends Q implements A,z{
@Override
public int add(int a, int b) {
return 0;
}
@Override
public void show() {
}
}
接口的出现避免了单继承的局限性
接口与接口之间是继承关系,而且接口可以多继承
interface A
{ void show();}
interface B
{ void method();}
interface C extents A,B //实现接口间的继承
{
void function();
}
抽象类和接口的区别
相同点:
都是不断向上抽取而来的。
不同点:
1.抽象类需要被继承,而且只能单继承。
接口需要被实现,而且可以多实现。
2.抽象类可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象方法。
接口中只能定义抽象方法,必须由子类去实现。
3.抽象类的继承,是is a 的关系,定义该体系的基本共性内容。
接口的实现是like a的关系,在定义体系额外功能。
举一个列子:
导盲犬可以由犬和额外功能导盲组成,当我们需要导盲猫是,可以将额外功能实现,从而提高了代码的复用性。
//犬按功能分,有导盲犬,搜救犬
abstract class 犬 {
abstract void 吼叫();
}
interface 导盲{ //此处接口相当于一个额外功能
abstract void 导盲();
}
class 导盲犬 extends 犬 implements 导盲{
public void 吼叫(){
}
public void 导盲(){
}
}