一、接口的概念:

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

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

二、接口的定义:

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

  定义格式:

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

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

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

三、类实现接口:

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

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

  定义格式:

class 类 implements 接口 {重写接口中方法
} 

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

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

四、接口中成员的特点:

  接口中定义变量的固定格式: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、需要定义子类的行为,又要为子类提供共性功能时候才使用抽象类

      

  

  

转载于:https://www.cnblogs.com/chanper/p/7452239.html

Java基础_面向对象之接口相关推荐

  1. Java基础_面向对象,Lambda 表达式

    面向对象 类,对象 类是对象的抽象,对象是类的具体,类是概念模型,定义对象的所有特性和所需的操作,对象是真实的模型,是一个具体的实体 1.显式创建对象 //最为常用 Object object = n ...

  2. java基础_面向对象(一)

    面向对象[*****] (1).面向过程编程思想 所谓的面向过程,就是注重编写过程,也就是说这一种编程思想中,我们需要先弄清楚我们要去实现一个什么效果,传递 什么参数,然后我们实现的这一个效果(也就是 ...

  3. java饲养员喂动物_做一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处...

    做一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处 interface Animal{ //动物的接口    public void eat(Food food); // ...

  4. Java基础之面向对象的概念 继承---组合----枚举类

    Java基础之面向对象的概念 继承---组合----枚举类 本章作为面向对象概念的最后一篇,但是作为一名java程序员在面向对象的这条路上还很长. 一.继承与组合简介 继承是实现类重用的重要手段,但是 ...

  5. 【Java基础】面向对象(三)

    [Java基础]面向对象(三) 一.多态 概念 引用类型转换 二.Object类 概述 常用方法 三.抽象类 抽象类与抽象方法的定义 注意事项 四.接口 概述 接口定义 含有抽象方法 含有默认方法和静 ...

  6. JAVA基础学习--面向对象

    JAVA基础学习–面向对象 1.面向对象与面向过程: 面向过程:就代表从头到位,每一步都需要我们来完成,例如洗衣服,首先收拾脏衣服.接上水.到洗衣液.搓.倒水.拧干.晾晒.每一步都需要我们来完成. 面 ...

  7. Java基础-初识面向对象编程(Object-Oriented-Programming)

    Java基础-初识面向对象编程(Object-Oriented-Programming) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Java是一门面向对象的程序设计语言.那么什 ...

  8. Java基础篇--面向对象(Object Oriented)

    Java基础篇--面向对象(Object Oriented) 1. 面向对象概念 1.1 什么事面向对象 1.2 理解面向对象 1.3 面向对象的特点 1.4 面向对象开发设计特征 2. 类与对象 2 ...

  9. 初学Java基础学习——抽象类和接口的区别

    初学Java基础学习--抽象类和接口的区别 一.关键字 1)抽象类的关键字 abstract class A{//定义一个抽象类: } class Test extends A{//子类使用exten ...

最新文章

  1. 程序员该有的职业素养
  2. Windows Server 2008R2使用web方式修改域账户密码
  3. Python编程基础:第六十节 多进程Multiprocessing
  4. 由创建一个不能被继承的类引发的对象模型的思考
  5. CLion:JetBrains 正式推出的 C/C++ IDE
  6. PLSQL远程连接oracle数据库
  7. c语言,c++求最大公因数与最小公倍数方法集合
  8. 区块链和数据科学:如果同时应用这两种技术,将会实现什么?
  9. 如何在网上下载自己需要的资源
  10. 微信后台红包系统架构设计与最佳实践
  11. MFC 通用对话框之“查找替换“对话框
  12. ThinkPHP 漏洞检测
  13. 身份证实名认证API接口,选择的时候应该注意什么?
  14. Introduction to Reinforcement Learning notes
  15. 微信支付证书如何部署在linux,微信支付平台证书更新指引
  16. 走进游戏中的美术:游戏美术风格介绍
  17. [人工智能-深度学习-81]:视觉 - 视频换脸软件大全
  18. 1.uap项目迁移到idea开发的详细教程(第壹篇)
  19. python与算法社区_3社区分类算法_python量化交易_Python视频-51CTO学院
  20. 阿里云服务器购买及SSH免密登录

热门文章

  1. qt几种常见安装包制作工具-Qt Installer Framework
  2. 路由器R473g虚拟服务器设置,TL-R473G上网方式配置详解
  3. Linux之expect命令,以及实战使用!!!
  4. Centos磁盘扩容
  5. excel统计数据的拷贝和粘贴方法
  6. 【涂鸦物联网足迹】API及SDK介绍
  7. Linksys WRT1900ACS刷OpenWrt
  8. php 催单功能,配置和使用工单催单功能
  9. linux查看rom总大小,Linux查看磁盘空间大小之lsblk命令
  10. 华为mate40pro和荣耀30Pro+ 哪个好