`
yaoshanqingling
  • 浏览: 6989 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

黑马程序员-接口

    博客分类:
  • java
 
阅读更多

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

 java接口特征:

   1,Java接口中的成员变量默认都是public,static,final类型的(都可省略),必须被显示初始化,即接口中的成员变量为常量(大写,单词之间用"_"分隔)

2, Java接口中的方法默认都是public,abstract类型的(都可省略),没有方法体,不能被实例化 

public interface A  

   {  

    int CONST = 1; //合法,CONST默认为public,static,final类型  

    void method(); //合法,method()默认为public,abstract类型  

    public abstract void method2(); //method2()显示声明为public,abstract类型  

   } 

3, Java接口中只能包含public,static,final类型的成员变量和public,abstract类型的成员方法

public interface A  

  {  

   int var; //错,var是常量,必须显示初始化   

10    void method(){...};   //错,接口中只能包含抽象方法  

11    protected void method2(); //错,接口中的方法必须是public类型  

12    static void method3(){...};   //错,接口中不能包含静态方法  

13   } 

4, 接口中没有构造方法,不能被实例化

14 public interface A  

15   {  

16    public A(){...}; //错,接口中不能包含构造方法  

17    void method();  

18   } 

5, 一个接口不能实现(implements)另一个接口,但它可以继承多个其它的接口

19 public interface A  

20  {  

21   void methodA();  

22  }  

23  public interface B  

24  {  

25   void methodB();  

26  }  

27  public interface C extends A, B   //C称为复合接口  

28  {  

29   void methodC();  

30  }  

31  public interface C implements A{...}   //错 


6, Java接口必须通过类来实现它的抽象方法

public class A implements B{...}

7, 当类实现了某个Java接口时,它必须实现接口中的所有抽象方法,否则这个类必须声明为抽象的

8, 不允许创建接口的实例(实例化),但允许定义接口类型的引用变量,该引用变量引用实现了这个接口的类的实例

32 public class B implements A{}  

33    A a = new B(); //引用变量a被定义为A接口类型,引用了B实例  

34    A a = new A(); //错误,接口不允许实例化 

9, 一个类只能继承一个直接的父类,但可以实现多个接口,间接的实现了多继承.

public class A extends B implements C, D{...} //B为class,C,D为interface

4, 通过接口,可以方便地对已经存在的系统进行自下而上的抽象,对于任意两个类,不管它们是否属于同一个父类,只有它们存在相同的功能,就能从中抽象出一个接口类型.对于已经存在的继承树,可以方便的从类中抽象出新的接口,但从类中抽象出新的抽象类却不那么容易,因此接口更有利于软件系统的维护与重构.对于两个系统,通过接口交互比通过抽象类交互能获得更好的松耦合.

5, 接口是构建松耦合软件系统的重要法宝,由于接口用于描述系统对外提供的所有服务,因此接口中的成员变量和方法都必须是public类型的,确保外部使用者能访问它们,接口仅仅描述系统能做什么,但不指明如何去做,所有接口中的方法都是抽象方法,接口不涉及和任何具体实例相关的细节,因此接口没有构造方法,不能被实例化,没有实例变量.

比较抽象类与接口

1, 抽象类与接口都位于继承树的上层

相同点

1, 代表系统的抽象层,当一个系统使用一颗继承树上的类时,应该尽量把引用变量声明为继承树的上层抽象类型,这样可以提高两个系统之间的送耦合

2, 都不能被实例化

3, 都包含抽象方法,这些抽象方法用于描述系统能提供哪些服务,但不提供具体的实现

不同点:

1, 在抽象类中可以为部分方法提供默认的实现,从而避免在子类中重复实现它们,这是抽象类的优势,但这一优势限制了多继承,而接口中只能包含抽象方法.由于在抽象类中允许加入具体方法,因此扩展抽象类的功能,即向抽象类中添加具体方法,不会对它的子类造成影响,而对于接口,一旦接口被公布,就必须非常稳定,因为随意在接口中添加抽象方法,会影响到所有的实现类,这些实现类要么实现新增的抽象方法,要么声明为抽象类

2, 一个类只能继承一个直接的父类,这个父类可能是抽象类,但一个类可以实现多个接口,这是接口的优势,但这一优势是以不允许为任何方法提供实现作为代价的三, 为什么Java语言不允许多重继承呢?当子类覆盖父类的实例方法或隐藏父类的成员变量及静态方法时,Java虚拟机采用不同的绑定规则,假如还允许一个类有多个直接的父类,那么会使绑定规则更加复杂,

因此,为了简化系统结构设计和动态绑定机制,Java语言禁止多重继承.而接口中只有抽象方法,没有实例变量和静态方法,只有接口的实现类才会实现接口的抽象方法(接口中的抽象方法是通过类来实现的),因此,一个类即使有多个接口,也不会增加Java虚拟机进行动态绑定的复杂度.因为Java虚拟机永远不会把方法与接口绑定,而只会把方法与它的实现类绑定.四, 使用接口和抽象类的总体原则:

1, 用接口作为系统与外界交互的窗口站在外界使用者(另一个系统)的角度,接口向使用者承诺系统能提供哪些服务,站在系统本身的角度,接口制定系统必须实现哪些服务,接口是系统中最高层次的抽象类型.通过接口交互可以提高两个系统之间的送耦合系统A通过系统B进行交互,是指系统A访问系统B时,把引用变量声明为系统B中的接口类型,该引用变量引用系统B中接口的实现类的实例。

35 public interface B  

36  {  

37  }  

38  public class C implements B  

39  {  

40  }  

41  public class A  

42  {  

43  }  

44  B a = new C(); 


2, Java接口本身必须非常稳定,Java接口一旦制定,就不允许随遇更加,否则对外面使用者及系统本身造成影响

3, 用抽象类来定制系统中的扩展点,抽象类来完成部分实现,还要一些功能通过它的子类来实现 

----------------------- android培训java培训、期待与您交流! ----------------------

详情请查看:http://edu.csdn.net/heima

分享到:
评论

相关推荐

    黑马程序员-Qt讲义.pdf

    Qt提供了基本的文件操作接口,支持二进制文件和文本文件的读写操作。Socket通信是网络编程中不可或缺的技术,Qt支持基于TCP/IP协议的客户端和服务器端编程,以及UDP通信和组播技术。 多线程是现代应用程序中用来...

    黑马程序员---注解归纳

    在本篇“黑马程序员---注解归纳”中,我们将深入探讨注解的基本概念、类型以及它们在实际开发中的应用。 首先,注解在Java中是一种特殊的声明,以`@`符号开头,后面跟着注解的名称。它们可以应用于类、接口、方法、...

    黑马程序员-Java语言进阶-源码、教程笔记.zip

    day01_Object类、常用API day02_Collection、泛型 day03_List、Set、数据结构、Collections day04_Map,斗地主案例 day05_异常,线程 ...day12_函数式接口 day13_Stream流、方法引用 Java基础小节练习题答案

    黑马程序员-----javaBean的操作类学习笔记

    JavaBean操作类的学习是Java程序员必备的技能之一,它涉及属性设置、获取、事件处理等基本概念。以下是对JavaBean及其操作的详细解释: 1. **JavaBean规范**: - **命名规则**:通常,JavaBean的类名应该以"Bean...

    黑马程序员-java多线程技术01

    本教程将聚焦于Java中的多线程技术,以“黑马程序员-java多线程技术01”为学习起点,探讨如何在Java中实现并管理线程。 首先,我们来理解什么是线程。线程是操作系统分配CPU时间的基本单元,一个进程中可以有多个...

    黑马程序员----泛型学习注意点

    黑马程序员提供的这篇关于泛型的学习注意点,结合了源码分析和工具应用,旨在帮助开发者深入理解并有效运用泛型。下面将详细阐述泛型的主要知识点: 1. 泛型的基本概念: 泛型是Java SE 5.0引入的新特性,主要用于...

    黑马程序员------代理类中invoke方法注意点

    `invoke`方法是Java动态代理中的核心方法,它位于`java.lang.reflect.InvocationHandler`接口中。本篇文章将深入探讨代理类中`invoke`方法的使用及其注意事项。 代理类主要用于实现AOP(面向切面编程),它可以提供...

    黑马程序员-梅兰商城项目实战

    【梅兰商城项目实战】是黑马程序员推出的一个全面的电商项目开发教程,旨在帮助学员深入理解和实践电商系统的构建。这个项目实战涵盖了从需求分析、设计、编码到测试的全过程,旨在提升学员在实际开发环境中的技能和...

    黑马程序员----泛型与反射的小运用

    泛型的基本语法是在类、接口或方法声明前加上尖括号`<>`,并在其中指定一个或多个类型参数。例如,一个简单的泛型列表类可以定义为`List<T>`,其中`T`就是类型参数,代表任意类型。使用泛型,我们可以创建一个能够...

    黑马程序员 - Java基础教学 - 08 - 面向对象(4)-多态.doc

    继承是指子类继承父类的所有成员变量和成员方法,而实现是指子类实现接口中的方法。在上面的示例代码中,我们使用了继承关系,例如`Cat`继承自`Animal`,`Dog`继承自`Animal`,`Pig`继承自`Animal`。 三、多态的...

    黑马程序员 大事件案例程序

    layui ajax 没有node.js功能都可用,高度类似。 黑马刘龙彬老师主讲的大事件项目,整体看完,给...最后,再次给黑马程序员和刘老师点个赞。 说明--ShowDoc https://www.showdoc.com.cn/escook?page_id=3707158761215217

    教材源码_javaweb_黑马程序员Javaweb源码_

    黑马程序员是一家知名的IT教育机构,他们提供的Javaweb教材源码是为了帮助学员深入理解和实践Web开发技术。下面将详细介绍JavaWeb的基本概念、核心技术和黑马程序员源码在学习过程中的作用。 1. **JavaWeb基础** ...

    黑马程序员Javase笔记

    "黑马程序员Javase笔记"是一个自学者在学习黑马程序员提供的Java全套课程过程中整理的笔记,主要涵盖了Java Standard Edition (Javase) 的核心内容。下面将详细讨论其中的关键知识点。 首先,DOS命令是操作系统中的...

    B站黑马程序员Python教程学习笔记.zip

    在B站黑马程序员的Python教程中,你将深入理解Python的基础概念,包括: 1. **变量与数据类型**:Python支持多种数据类型,如整型(int)、浮点型(float)、字符串(str)和布尔型(bool)。此外,还有列表(list...

    黑马程序员 shh框架-crm项目源码

    "黑马程序员 shh框架-crm项目源码" 是一个基于SSH(Spring、Struts、Hibernate)框架开发的客户关系管理(CRM)系统的源代码。这个项目旨在帮助学习者理解和掌握SSH框架在实际项目中的应用,同时也为开发者提供了一...

    黑马程序员毕业设计资料,代码,数据库设计论文等

    "黑马程序员毕业设计资料,代码,数据库设计论文等" 这个标题表明这是一份来自“黑马程序员”教育平台的资源集合,主要用于帮助学生进行毕业设计。其中包含了项目代码、数据库设计相关的论文等内容,适用于计算机科学...

    《JavaWeb程序开发进阶》-黑马程序员配套资源ppt.zip

    《JavaWeb程序开发进阶》是一本深入探讨JavaWeb技术的教材,由黑马程序员提供配套的教学资源PPT。这些PPT涵盖了多个关键章节,旨在帮助学习者系统地掌握JavaWeb开发的核心技能。以下是对各章节内容的详细解读: 1. ...

    黑马程序员JAVA WEB全笔记pdf

    本笔记基于黑马程序员的课程内容,全面覆盖了Java Web的基础知识,包括前端开发技术如HTML、CSS、JavaScript,以及后端服务器端的Java Servlet和JSP(Java Server Pages)。 一、前端基础 1. ...

    黑马程序员匠心之作 C++教程_第7阶段-C++实战项目机房预约讲义.rar

    《黑马程序员匠心之作 C++教程_第7阶段-C++实战项目机房预约讲义》是为C++初学者量身定制的一份详细教学资源。这份讲义深入浅出地介绍了C++编程语言,并通过实际的机房预约系统项目,帮助学习者将理论知识与实践相...

Global site tag (gtag.js) - Google Analytics