---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
一、接口的产生:
抽象类中可以定义抽象方法,当一个类中的方法全是抽象的,这时,可以通过另外一种特殊的形式来体现。
即接口:接口是一个特殊的抽象类(但是它不是类,因为不会继承Object类)。
接口用关键字 interface 来定义:
<span style="font-size:18px;"><span style="white-space:pre"> </span>abstract class Demo {
abstract void show1();
abstract void show2();
}</span>
二、接口的定义格式:
1、定义变量,但是变量必须要有固定的修饰符修饰,public static final 所以接口中的变量也称为常量。
2、定义方法,方法的固定修饰符,public abstract。
3、接口中的成员都是公共的。
4、接口中的修饰符,如果自己没有写,编译器会自动添加。
三、接口的特点:
1、接口不可以创建对象;
2、子类必须覆盖掉接口中所有的抽象方法后,子类才可以实例化,否则子类是一个抽象类,不可以进行实例化;
3、子类必须与接口产生关系,类与接口之间的关系是实现,同过关键字 implements 来实现;
4、接口的产生解决了多继承的弊端。将多继承的这种机制在Java 中通过实现完成了。
接口的产生解决多继承弊端的代码示例:
<span style="font-size:18px;"><span style="white-space:pre"> </span>interface A {
void show1();
}
interface B {
void show2();
}
class C implements A,B { // 多实现。同时实现多个接口。
public void show1(){}
public void show2(){}
}</span>
接口是如何解决多继承的弊端呢?
弊端:多继承时,当多个父类有相同功能时,子类调用父类功能会产生不确定性。核心原因就是在于多继承父类中功能有主题,而导致调用运行时,uqueding运行那个主体内容。
接口中的功能没有方法体(主体),方法体由子类来确定,因此接口的多实现就解决了多继承。
<span style="font-size:18px;"><span style="white-space:pre"> </span>interface A {
<span style="white-space:pre"> </span> void show(); //接口中的功能都没有方法体
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>interface B {
<span style="white-space:pre"> </span> void show(); //接口中的功能都没有方法体
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>class C implements A,B { // 多实现。同时实现多个接口。
<span style="white-space:pre"> </span> public void show(); //方法体是由子类来明确
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>C c = new C();
<span style="white-space:pre"> </span>c.show(); //对象调用方法,方法体是确定的,可以调用。</span>
四、接口的应用:
子类通过继承父类扩展功能,通过继承扩展的功能都是子类应该具备的基础功能。如果子类想要继续扩展其他类中的功能,这时可以通过实现接口来完成。
<span style="font-size:18px;"><span style="white-space:pre"> </span>class Fu {
<span style="white-space:pre"> </span> public void show(){}
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>interface Inter { //接口一般定义事物的扩展功能
<span style="white-space:pre"> </span> pulbic void show1();
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>/*
<span style="white-space:pre"> </span> * 让子类继承父类实现父类功能,
<span style="white-space:pre"> </span> * 子类想要继续扩展其他类中的功能
<span style="white-space:pre"> </span> * 只需要实现接口
<span style="white-space:pre"> </span> */
<span style="white-space:pre"> </span>class Zi extends Fu implements Inter {
<span style="white-space:pre"> </span> public void show1() {
<span style="white-space:pre"> </span> System.out.println("重写父类方法");
<span style="white-space:pre"> </span> }
<span style="white-space:pre"> </span>}</span>
a、接口的出现避免了单继承的局限性
b、父类中定义事物的基本功能
c、接口中定义事物的扩展功能
五、接口与接口的关系:
1、类与类之间的关系是继承
2、类与接口之间的关系是实现
3、接口与接口之间的关系是继承
<span style="font-size:18px;"><span style="white-space:pre"> </span>interface A {
<span style="white-space:pre"> </span> void show1();
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>interface AA {
<span style="white-space:pre"> </span> void show11();
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>interface B extends A,AA { //接口与接口之间的关系是继承,可以多继承。
<span style="white-space:pre"> </span> void show2();
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>class Test implements B { //类与接口之间的关系是实现。
<span style="white-space:pre"> </span> public void show1(){}
<span style="white-space:pre"> </span> public void show2(){}
<span style="white-space:pre"> </span> public void show11(){}
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>class InterfaceDemo {
<span style="white-space:pre"> </span>public static void main(String[] args) {
<span style="white-space:pre"> </span> DemoImpl d = new DemoImpl();
<span style="white-space:pre"> </span> d.show1();
<span style="white-space:pre"> </span> d.show2();
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}</span>
1,、接口的出现对功能是实现了扩展
2、接口的出现定义了规则
3、接口的出现降低了耦合性(解耦 -- 让事物之间的耦合性降低)
接口的出现完成了解耦,说明有两方:一方在使用这个规则;一方在实现这个规则。
比如电脑使用USB接口这个规则,而外围设备则是在实现则个规则。
详细请查看:www.itheima.com