接口的引入:
比如抽象类中都是抽象方法,
abstract class AbsDemo
{
abstract void show1();
abstract void show2();
}
当一个抽象类的方法都是抽象类的时候,这时可以将抽象类用另外一种形式定义和表示,就是接口 interface。
定义接口的关键字不是class,而是interface。
对于接口当中常见的成员:而且这些成员都有固定的修饰符,
2、抽象方法 public abstract
interface Demo //编译后还是Demo.class文件
{
public static final int NUM = 4;
int num = 4; //如果前面没有加public static final修饰,系统会默认加上
public abstract void show1();
public abstract void show2();
void show(); //如果前面没有加public static final修饰,系统会默认加上
}
接口的实现:
类与类之间是继承关系,类与接口之间是实现关系。
接口不可以实例化,只能由实现了接口的子类并覆盖了接口中所有的抽象方法后,该子类才可以实例化。否则,这个子类就是一个抽象类。
interface Demo
{
public static final int NUM = 4;
public abstract void show1();
public abstract void show2();
}
class DemoImp implements Demo
{
public void show1()
{
}
public void show2()
{
}
}
接口的多实现:
在java中不直接支持多继承,因为会出现调用的不确定性。所以java将多继承机制进行改良,在java中变成了多实现。
一个类可以实现多个接口。
interface A
{
public void show();
}
interface B
{
public void show();
}
class TestImp implements A,B //多实现
{
public void show() //这个相当于实现了A和B接口的show()
{
}
}
interface A
{
public void show1();
}
interface B
{
public void show();
}
class TestImp implements A,B //多实现
{
public void show1() //这个相当于实现了A和B接口的show()
{
}
public void show()
{
}
}
interface A
{
public void show1();
}
interface B
{
public void show();
}
class TestImp implements A,B //需要全部实现A和B中的函数
{
public void show1()
{
}
public void show()
{
}
}
一个类在继承另一个类的同时,还可以实现多个接口。
interface A
{
public void show1();
}
interface B
{
public void show();
}
class Q
{
public void method(){}
}
class TestImp extends Q implements A,B //需要全部实现A和B中的函数
{
public void show1()
{
}
public void show()
{
}
}
接口的出现避免了单继承的局限性。
接口的细节:
类与类之间用继承extends
类与接口之间用实现implements
接口与接口之间可以是继承关系,而且接口可以多继承。原理是接口没有方法体,避免了多继承的不确定性。
interface C
{
void show();
}
interface D
{
void method();
}
interface InterfaceMutiExtends extends C,D
{
void function();
}
class newDemo implements InterfaceMutiExtends
{
//需要覆盖3个方法
public void show(){}
public void method(){}
public void function(){}
}
接口的特点:
接口是对外暴露的规则。
接口是程序的功能拓展。
接口的出现降低耦合性。
接口可以用来多实现。
类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口。
接口与接口之间可以有继承关系。
比如笔记本的USB口就是接口的设计理念。
接口的应用:
interface USB
{
public void open();
public void close();
}
//U盘和鼠标这些设备和电脑的耦合性降低了。
//U盘
class UPan implements USB
{
public void open()
{
System.out.println("UPan open");
}
public void close()
{
System.out.println("UPan close");
}
}
//鼠标
class UMouse implements USB
{
public void open()
{
System.out.println("UMouse open");
}
public void close()
{
System.out.println("UMouse close");
}
}
class BookPC
{
public static void main(String[] arg)
{
useUSB(new UPan());
useUSB(new UMouse());
}
//使用规则
public static void useUSB(USB u) //接口类型的引用,用于接收(指向)接口的子类对象
{
u.open();
u.close();
}
}
输出: