----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
java接口特征:
1,Java接口中的成员变量默认都是public,static,final类型的(都可省略),必须被显示初始化,即接口中的成员变量为常量(大写,单词之间用"_"分隔)
2, Java接口中的方法默认都是public,abstract类型的(都可省略),没有方法体,不能被实例化
1 public interface A
2 {
3 int CONST = 1; //合法,CONST默认为public,static,final类型
4 void method(); //合法,method()默认为public,abstract类型
5 public abstract void method2(); //method2()显示声明为public,abstract类型
6 }
3, Java接口中只能包含public,static,final类型的成员变量和public,abstract类型的成员方法
7 public interface A
8 {
9 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提供了基本的文件操作接口,支持二进制文件和文本文件的读写操作。Socket通信是网络编程中不可或缺的技术,Qt支持基于TCP/IP协议的客户端和服务器端编程,以及UDP通信和组播技术。 多线程是现代应用程序中用来...
在本篇“黑马程序员---注解归纳”中,我们将深入探讨注解的基本概念、类型以及它们在实际开发中的应用。 首先,注解在Java中是一种特殊的声明,以`@`符号开头,后面跟着注解的名称。它们可以应用于类、接口、方法、...
day01_Object类、常用API day02_Collection、泛型 day03_List、Set、数据结构、Collections day04_Map,斗地主案例 day05_异常,线程 ...day12_函数式接口 day13_Stream流、方法引用 Java基础小节练习题答案
JavaBean操作类的学习是Java程序员必备的技能之一,它涉及属性设置、获取、事件处理等基本概念。以下是对JavaBean及其操作的详细解释: 1. **JavaBean规范**: - **命名规则**:通常,JavaBean的类名应该以"Bean...
本教程将聚焦于Java中的多线程技术,以“黑马程序员-java多线程技术01”为学习起点,探讨如何在Java中实现并管理线程。 首先,我们来理解什么是线程。线程是操作系统分配CPU时间的基本单元,一个进程中可以有多个...
黑马程序员提供的这篇关于泛型的学习注意点,结合了源码分析和工具应用,旨在帮助开发者深入理解并有效运用泛型。下面将详细阐述泛型的主要知识点: 1. 泛型的基本概念: 泛型是Java SE 5.0引入的新特性,主要用于...
`invoke`方法是Java动态代理中的核心方法,它位于`java.lang.reflect.InvocationHandler`接口中。本篇文章将深入探讨代理类中`invoke`方法的使用及其注意事项。 代理类主要用于实现AOP(面向切面编程),它可以提供...
【梅兰商城项目实战】是黑马程序员推出的一个全面的电商项目开发教程,旨在帮助学员深入理解和实践电商系统的构建。这个项目实战涵盖了从需求分析、设计、编码到测试的全过程,旨在提升学员在实际开发环境中的技能和...
泛型的基本语法是在类、接口或方法声明前加上尖括号`<>`,并在其中指定一个或多个类型参数。例如,一个简单的泛型列表类可以定义为`List<T>`,其中`T`就是类型参数,代表任意类型。使用泛型,我们可以创建一个能够...
继承是指子类继承父类的所有成员变量和成员方法,而实现是指子类实现接口中的方法。在上面的示例代码中,我们使用了继承关系,例如`Cat`继承自`Animal`,`Dog`继承自`Animal`,`Pig`继承自`Animal`。 三、多态的...
layui ajax 没有node.js功能都可用,高度类似。 黑马刘龙彬老师主讲的大事件项目,整体看完,给...最后,再次给黑马程序员和刘老师点个赞。 说明--ShowDoc https://www.showdoc.com.cn/escook?page_id=3707158761215217
黑马程序员是一家知名的IT教育机构,他们提供的Javaweb教材源码是为了帮助学员深入理解和实践Web开发技术。下面将详细介绍JavaWeb的基本概念、核心技术和黑马程序员源码在学习过程中的作用。 1. **JavaWeb基础** ...
"黑马程序员Javase笔记"是一个自学者在学习黑马程序员提供的Java全套课程过程中整理的笔记,主要涵盖了Java Standard Edition (Javase) 的核心内容。下面将详细讨论其中的关键知识点。 首先,DOS命令是操作系统中的...
在B站黑马程序员的Python教程中,你将深入理解Python的基础概念,包括: 1. **变量与数据类型**:Python支持多种数据类型,如整型(int)、浮点型(float)、字符串(str)和布尔型(bool)。此外,还有列表(list...
"黑马程序员 shh框架-crm项目源码" 是一个基于SSH(Spring、Struts、Hibernate)框架开发的客户关系管理(CRM)系统的源代码。这个项目旨在帮助学习者理解和掌握SSH框架在实际项目中的应用,同时也为开发者提供了一...
"黑马程序员毕业设计资料,代码,数据库设计论文等" 这个标题表明这是一份来自“黑马程序员”教育平台的资源集合,主要用于帮助学生进行毕业设计。其中包含了项目代码、数据库设计相关的论文等内容,适用于计算机科学...
《JavaWeb程序开发进阶》是一本深入探讨JavaWeb技术的教材,由黑马程序员提供配套的教学资源PPT。这些PPT涵盖了多个关键章节,旨在帮助学习者系统地掌握JavaWeb开发的核心技能。以下是对各章节内容的详细解读: 1. ...
本笔记基于黑马程序员的课程内容,全面覆盖了Java Web的基础知识,包括前端开发技术如HTML、CSS、JavaScript,以及后端服务器端的Java Servlet和JSP(Java Server Pages)。 一、前端基础 1. ...
《黑马程序员匠心之作 C++教程_第7阶段-C++实战项目机房预约讲义》是为C++初学者量身定制的一份详细教学资源。这份讲义深入浅出地介绍了C++编程语言,并通过实际的机房预约系统项目,帮助学习者将理论知识与实践相...