首先,介绍一下接口(interface)技术,这种技术主要用来描述类具有什么功能,而不给出每个功能的具体实现。一个类可以实现(implement)一个或多个接口,并在需要接口的地方,随时使用实现了相应接口的对象。
克隆对象(有时又被称为深拷贝)。对象的克隆是指创建一个新的对象,且新对象的状态与原始对象的状态相同。当对克隆的新对象进行修改时,不会影响原始对象的状态。
内部类(inner class)被定义在另外一个类的内部,其中的方法可以访问包含他们的外部类的域。内部类技术主要用于设计具有相互协作关系的类集合。
代理(proxy),这是一种实现任意接口的对象。代理是一种非常专业的构造工具,它可以被用来构建系统级的工具。
6.1 接口
接口中的所有方法自动地属于public。因此,在接口中声明方法时,不必提供关键字public。
接口绝不能含有实例域,也不能再接口中实现方法。提供实例域和方法实现的任务应该由实现接口的那个类来完成。因此,可以将接口看成时没有实例域的抽象类。
6.1.1 接口的特性
与接口中的方法一样,接口中的域也被自动地设为public static final
6.1.2 接口与抽象类
6.2 对象克隆
注意:Cloneable接口是Java提供的几个标记接口(tagging interface)之一。标记接口没有方法,使用它的唯一目的是可以用instanceof进行类型检查。
为了实现深拷贝,必须克隆所有可变的实例域。
6.3 接口与回调
回调(callback)是一种常见的程序设计模式。在这种模式中,可以指出某个特定事件发生时应该采取的动作。
6.4 内部类
内部类(inner class)是定义在另一个类中的类。使用内部类的原因:
1)内部类方法可以访问该类定义所在作用域中的数据,包括私有的数据。
2)内部类可以对同一个包中的其他类隐藏起来。
3)当想要定义一个回调函数且不息那个编写大量代码时,使用匿名(anonymous)内部类比较便捷。
6.4.1 使用内部类访问对象状态
只有内部类可以是私有类,而常规类只能具有包的可见性,或公有的可见性。
注意:如果内部类有构造器,编译器将会对它进行修改,并添加一个外围类引用的参数。
6.4.2 内部类的特殊语法规则
使用外围类的正规语法:OuterClass.this表示外围类引用。
反过来,可以采用下列语法格式更加明确地编写内部对象的构造器:
OuterObject.new InnerClass(construction parameters)
需要注意,在外围类的作用域之外,可以这样引用内部类:
OuterClass.InnerClass
6.4.3 内部类是否实用、必要和安全
内部类是一种编译器现象,与虚拟机无关。编译器会把内部类翻译成用$(美元符号)分隔外部类名与内部类名的常规类文件,而虚拟机对此一无所知。
6.4.4 局部内部类
局部类不能用public或private访问说明符进行声明。它的作用域被限定在声明该局部类的块中。局部类有一个优势,及对外部世界可以完全地隐藏起来。与其他内部类相比较,局部类还有另一个优势,它们不仅能够范围包含它们的外围类的域,而且还可以访问局部变量!不过,这些局部变量必须被声明为final。
注意:final关键字可以应用于局部变量、实例变量和静态变量。在所有这些情况下,它们的含义都是:在创建这个变量之后,只能够为之赋值一次。此后,再也不能修改它的值了,这就是final。不过,在定义final变量的时候,不必进行初始化。
6.4.5 匿名内部类
假如只创建这个类的一个对象,就不必为它命名了。这种类被称为匿名内部类(anonyous inner class)。
6.4.6 静态内部类
有时候,使用内部类只是为了把一个类隐藏在另外一个类的内部,并不需要内部类引用外围类对象。为此,可以将内部类声明为static,以便取消产生的引用。
只有内部类可以声明为static。静态内部类的对象除了没有对生成它的外围类对象的引用特权外,与其他所有内部类完全一样。
注意:在内部类不需要访问外围类对象的时候,应该使用静态内部类。
声明在接口中的内部类自动成为static和public。
6.5 代理
代理(proxy)是JDK1.3新增加的特性。利用代理可以在运行时创建一个实现了一组给定接口的新类。这种功能只有在编译时无法确定需要实现哪个接口时才有必要使用。
代理类可以在运行时创建全新的类,这样的代理类能够实现指定的接口。尤其是,它具有下列方法:
1)指定接口所需要的全部方法。
2)Object类中的全部方法。
代理类的特性
代理类是在程序运行过程中创建的。然而,一旦被创建,就变成了常规类,与虚拟机中的任何其他类没有什么区别。
所有的代理类都扩展于Proxy类。一个代理类只有一个实例变量——调用处理器,它定义在Proxy的超类中。为了履行代理对象的职责,所需要的任何附加数据都必须存储在调用处理器中。
所有的代理类都覆盖了Object类中的方法toString、equals和hashCode.如同所有的代理方法一样,这些方法仅仅调用了调用处理器的invoke。Object类中的其他方法没有被重新定义。
没有定义代理类的名字,Sun虚拟机中的Proxy类将生成一个以字符串$Proxy开头的类名。
对于特定的类加载器和预设的一组接口来说,只能有一个代理类。也就是说,如果使用同一个加载器和接口数组调用两次newProxyInstance方法的话,只能够得到同一个类的两个对象,也可以利用getProxyClass方法获得这个类:
Class proxyClass=Proxy.getProxyClass(null,interfaces);
代理类一定是public和final。如果代理类实现的所有接口都是public,那么代理类就不属于某个特定的包;否则,所有非公有的接口都必须属于同一个包,同时,代理类也属于这个包。
可以通过调用Proxy类中的isProxyClass方法检测一个特定的Class对象是否代表一个代理类。
分享到:
相关推荐
Java 语言程序设计第 5 章接口多态 本章主要讲解 Java 语言程序设计中接口和多态的概念、语法和应用。接口是 Java 语言中的一种抽象机制,它提供了一种定义类之间的“协议”的方式,允许类之间实现多继承,同时免除...
- 虽然名为“内部类”,但Java也允许接口嵌套在其他接口或类中,这与类的内部类相似,提供了一种组织接口的方式。 5. **内部类访问外部类成员**: - 内部类可以直接访问外部类的所有成员,包括私有成员,这是内部...
第6章 接口与内部类 第7章 图形程序设计 第8章 事件处理 第9章 Swing用户界面组件 第10章 部署应用程序和applet 第11章 异常、日志、断言和调试 第12章 泛型程序设计 第13章 集合 第14章 多线程
总的来说,华为内部培训资料之第二章“常见网络接口与电缆”涵盖了网络连接的基础知识,包括接口类型、电缆种类及其应用,这些都是网络工程师必备的专业技能。对于网络学习爱好者来说,掌握这些内容将极大地提升对...
第6章 接口与内部类 第7章 图形程序设计 第8章 事件处理 第9章 Swing用户界面组件 第10章 部署应用程序和applet 第11章 异常、日志、断言和调试 第12章 泛型程序设计 第13章 集合 第14章 多线程
第6章 接口与内部类 第7章 图形程序设计 第8章 事件处理 第9章 Swing用户界面组件 第10章 部署应用程序和applet 第11章 异常、日志、断言和调试 第12章 泛型程序设计 第13章 集合 第14章 多线程
【接口技术与硬件设计】章节主要探讨了在构建基于ARM7处理器核的嵌入式系统时,如何设计和配置最小系统。最小系统是确保处理器能够正常运行的基础,它包括供电系统、时钟系统、调试测试接口、复位系统以及存储器系统...
第6章 接口与内部类 第7章 图形程序设计 第8章 事件处理 第9章 Swing用户界面组件 第10章 部署应用程序和applet 第11章 异常、日志、断言和调试 第12章 泛型程序设计 第13章 集合 第14章 多线程
第6章 接口与内部类 第7章 图形程序设计 第8章 事件处理 第9章 Swing用户界面组件 第10章 部署应用程序和applet 第11章 异常、日志、断言和调试 第12章 泛型程序设计 第13章 集合 第14章 多线程
内部类可以分为成员内部类、局部内部类、匿名内部类以及静态内部类。例如,描述中的`RedCow`是`RedCowFarm`类的内部类,这样的设计使得`RedCow`类只能被`RedCowFarm`类访问,增加了代码的封装性。内部类可以访问其...
第三章可能详细介绍了微处理器的内部结构,如寄存器组、算术逻辑单元(ALU)、控制单元等组成部分,以及它们如何协同工作来执行指令。 2. **指令系统**:微处理器能够理解和执行的最基本命令就是指令。这一章可能...
第6章 接口与内部类 第7章 图形程序设计 第8章 事件处理 第9章 Swing用户界面组件 第10章 部署应用程序和applet 第11章 异常、日志、断言和调试 第12章 泛型程序设计 第13章 集合 第14章 多线程
第6章 接口与内部类 第7章 图形程序设计 第8章 事件处理 第9章 Swing用户界面组件 第10章 部署应用程序和applet 第11章 异常、日志、断言和调试 第12章 泛型程序设计 第13章 集合 第14章 多线程
第6章 接口与内部类 第7章 图形程序设计 第8章 事件处理 第9章 Swing用户界面组件 第10章 部署应用程序和applet 第11章 异常、日志、断言和调试 第12章 泛型程序设计 第13章 集合 第14章 多线程
第6章 接口与内部类 第7章 图形程序设计 第8章 事件处理 第9章 Swing用户界面组件 第10章 部署应用程序和applet 第11章 异常、日志、断言和调试 第12章 泛型程序设计 第13章 集合 第14章 多线程
- **成员内部类**:像成员变量一样,可以在类的主体中定义,与类的其他成员处于同一级别。 - **方法内部类**(局部内部类):定义在某个方法内部,只在该方法的作用域内有效。 - **匿名内部类**:没有名字的内部...
第六章“类的思想”探讨了从面向过程编程过渡到面向对象编程的关键概念。在面向过程编程中,程序主要由一系列处理数据的函数构成,数据结构和算法是设计的重点。例如,为了统计一组整数中正数和负数的数量,程序员会...
第6章接口与内部类 6.1接口 6.1.1接口的特性 6.1.2接口与抽象类 6.2对象克隆 6.3接口与回调 6.4内部类 6.4.1使用内部类访问对象状态 6.4.2内部类的特殊语法规则 6.4.3内部类是否实用、必要和...
第6章接口与内部类 6.1接口 6.1.1接口的特性 6.1.2接口与抽象类 6.2对象克隆 6.3接口与回调 6.4内部类 6.4.1使用内部类访问对象状态 6.4.2内部类的特殊语法规则 6.4.3内部类是否实用、必要和...