Java基础_面向对象之接口

一、接口的概念:

  接口是功能的集合,其是一个比抽象类还抽象的类,也可以把它看作是一种数据类型。

  接口只是描述其具备的方法,但是并未具体实现,具体的实现是由接口的实现类去完成。

二、接口的定义:

  接口的定义需要使用interface关键字,通过编译器编译以后生成.class文件,可看作为是一种包含了功能的特殊类。

  定义格式:

1 public interface 接口名 {
2     抽象方法1;
3     抽象方法2;
4     抽象方法3;
5 }

 

   接口中的方法均为公共访问的抽象方法

   接口中无法定义普通的成员变量

三、类实现接口:

  类与接口的关系为实现关系,既类实现接口。实现的动作类似继承,只是关键字不同,实现使用implements。

  实现类实现接口后,就相当于声明:“我应该具备该接口的功能”。实现类中必须要重写接口中的抽象方法来实现具体的功能。

  定义格式:

classimplements 接口 {
    重写接口中方法
} 

  在该类实现接口后,该类就会将接口中的抽象方法继承过来,此时该类必须要重写抽象方法,完成具体的逻辑。

  此处可以理解为,类是实现事物的描述,接口是事物功能的集合体。

四、接口中成员的特点:

  接口中定义变量的固定格式:public static final,所以接口中的变量也可称作为常量,其值不能改变。

  接口中定义方法的固定格式:public abstract class 方法名(){}

  接口不可以创建对象。

  子类必须要全部重写接口中的抽象方法,否则子类还是一个抽象的类。

public interface Demo {                  //定义一个名称为Demo的接口。
    public static final int NUM = 3;// NUM的值不能改变
    public abstract void show1();
    public abstract void show2();
}  


//定义子类去覆盖接口中的方法。类与接口之间的关系是 实现。通过 关键字 implements
public class DemoImpl implements Demo { //子类实现Demo接口。
    //重写接口中的方法。
    public void show1(){}
    public void show2(){}
}     

五、接口的多实现:

  为什么要定义接口,使用抽象类描述也没有问题,接口到底有啥用呢?

  接口最重要的体现:解决多继承的弊端。将多继承这种机制在java中通过多实现完成了。

 1 interface Fu1
 2 {
 3     void show1();
 4 }
 5 interface Fu2
 6 {
 7     void show2();
 8 }
 9 class Zi implements Fu1,Fu2// 多实现。同时实现多个接口。
10 {
11     public void show1(){}
12     public void show2(){}
13 }

  怎么解决多继承的弊端呢?

  弊端:多继承时,当多个父类中有相同功能时,子类调用会产生不确定性。

  其实核心原因就是在于多继承父类中功能有主体,而导致调用运行时,不确定运行哪个主体内容。

  为什么多实现能解决了呢?

  因为接口中的功能都没有方法体,由子类来明确。

六、类继承类的同时实现接口:

  子类在扩展其功能的场景下如何去实现呢?

  子类可以通过继承父类和实现接口来解决上述的场景。

  通过子类通过继承父类扩展功能,通过继承扩展的功能都是子类具备的基础功能,通过实现接口扩展其它类中的功能。

 1 class Fu {
 2     public void show(){}
 3 }
 4 interface Inter {
 5     pulbic abstract void show1();
 6 }
 7 class Zi extends Fu implements Inter {
 8     public void show1() {
 9     }
10 } 

  接口的出现避免了单继承的局限性。父类中定义的事物的基本功能。接口中定义的事物的扩展功能。

七、接口的多继承:

  类与类之间可以通过继承产生关系,类与接口直接可以通过实现来产生关系,接口与接口之间通过什么来产生关系呢?

  接口与接口之间可以通过extends 继承来产生关系,然后通过类来实现子接口内的所有抽象方法(包括父接口中)。

  

 1 public interface A {
 2     public abstract void a();
 3 }
 4 
 5 public interface B {
 6     public abstract void b();
 7 }
 8 
 9 public interface C {
10     public abstract void c();
11 }
12 
13 /*
14  *    接口与接口之间,是继承关系
15  *    Java支持接口之间的多继承,一个接口可以同时继承多个接口
16  * */
17 public interface D extends A,B,C {
18     public abstract void d();
19 }
20 
21 /*
22  *    实现接口D,重写D的全部抽象方法
23  *    而且接口D,继承A、B、C
24  *    Test实现类,重写A、B、C、D三接口全部抽象方法
25  * */
26 public class Test implements D {
27     public void a() {}
28     public void b() {}
29     public void c()    {}
30     public void d() {}
31 }
View Code

八、接口的思想:

  例子:

    电脑上留有很多个插口,而这些插口可以插入相应的设备,这些设备为什么能插在上面呢?主要原因是这些设备在生产的时候符合了这个插口的使用规则,否则将无法插入接口中,更无法使用。发现这个插口的出现让我们使用更多的设备。

  优处:

    接口可以扩展功能

    接口可以暴漏出来规则

    接口可以降低耦合性,既,设备与设备之间实现了解耦问题

九、接口和抽象类的区别:

  接口和抽象类的却别是什么?

  例子:

    犬:

      行为:

        吼叫;

        吃饭;

    缉毒犬:

      行为:

        吼叫;

        吃饭;

        缉毒;

  分析:

    由于犬分为很多种类,他们吼叫和吃饭的方式不一样,在描述的时候不能具体化,也就是吼叫和吃饭的行为不能明确。当描述行为时,行为的具体动作不能明确,这时,可以将这个行为写为抽象行为,那么这个类也就是抽象类。

    可是当缉毒犬有其他额外功能时,而这个功能并不在这个事物的体系中。这时可以让缉毒犬具备犬科自身特点的同时也有其他额外功能,可以将这个额外功能定义接口中。

  代码:

 1 interface 缉毒{
 2     public abstract void 缉毒();
 3 }
 4 //定义犬科的这个提醒的共性功能
 5 abstract class 犬科{
 6 public abstract void 吃饭();
 7 public abstract void 吼叫();
 8 }
 9 // 缉毒犬属于犬科一种,让其继承犬科,获取的犬科的特性,
10 //由于缉毒犬具有缉毒功能,那么它只要实现缉毒接口即可,这样即保证缉毒犬具备犬科的特性,也拥有了缉毒的功能
11 class 缉毒犬 extends 犬科 implements 缉毒{
12 
13     public void 缉毒() {
14     }
15     void 吃饭() {
16     }
17     void 吼叫() {
18     }
19 }
20 class 缉毒猪 implements 缉毒{
21     public void 缉毒() {
22     }
23 }
View Code

 

  通过上述,归纳接口和抽象类的相同和不同

    相同点:

      1、都是继承的顶端,用于被其它类实现和继承

      2、都不能直接实例化

      3、都包含抽象方法,子类必须重写这些抽象方法

    区别:

      1、抽象类中既包括抽象方法也可以包括非抽象方法,避免子类重复实现这些方法,提高代码重用性,接口只能包含抽象方法

      2、一个类只能继承一个父类,但是可以实现多个接口,实现接口避免了单继承的问题

      3、抽象类是事物中应该具备的内容,继承体系是is...a关系

      4、接口是事物中的额外内容,继承体系是like...a关系

    两者选用:

      1、优先选择接口,尽量少用抽象类

      2、需要定义子类的行为,又要为子类提供共性功能时候才使用抽象类

      

  

  

posted @ 2017-08-30 11:28  那夜床塌了  阅读(177)  评论(0编辑  收藏  举报