您的位置:首页 > 编程语言 > Java开发

java基础语法学习笔记(七)

2012-06-26 16:03 429 查看
接口与内部类

前面的章节已经学习了java面向对象程序设计的全部基本知识。下面主要学习常用的高级技术。

接口

在java程序设计语言中,接口不是类,而是一组对类的需求描述,这些类要遵从接口描述的统一格式定义。下面是一个具体的例子。

Arrays类中的sort方法承诺可以对对象数组进行排序,但要求满足下列前提:对象所属的类必须实现了Comparable接口。下面是Comparable接口的代码:

public interface Comparable

{

int compareTo(Object other);

}

这就是说,任何实现Comparable接口的类都需要包含compareTo方法,并且这个方法的参数必须是一个Object对象,返回一个整形数值。

接口中的所有方法自动地属于public,因此,在接口中声明方法时,不必提供关键字public。

接口的特性:

接口不是类,尤其是不能使用new运算符实例化一个接口;

x = new Comparable(...); //ERROR

然而,尽管不能构造接口对象,却能声明接口变量。

Comparable x; //OK

接口变量必须引用实现了接口类的对象:

x = new Employee(...); //OK,provided Employee implement Comparable

接下来,与使用instanceof检查一个对象是否属于某个特定类一样,也可以使用instance检查一个对象是否实现了某个特定的接口:

if(anObject instanceof Comparable){...}

与可以建立类的继承关系一样,也可以扩展接口。

public interface Moveable

{

void move(double x,double y);

}

可以以它为基础扩展一个叫做Powered的接口,尽管在接口中不能包含实例域或静态方法,但是可以包含常量:

public interface Powered extends Moveable

{

double milesPerGallon();

double SPEED_LIMIT = 95; a public static final constant

}

尽管每个类只能够拥有一个超类,但却可以实现多个接口。

class Employee implement Cloneable,Comparable

接口与抽象类,每个类只能扩展于一个类,但每个类可以实现多个接口,由于java语言不支持多继承,而是利用接口机制来实现多继承的大部分功能。

 

对象克隆

当拷贝一个变量时,原始变量与拷贝变量引用同一个对象,这就是说改变一个变量所引用的对象将会对另一个变量产生影响。如果创建一个对象的新拷贝,它的最初状态不变,但以后将可以各自改变量各自的状态,就需要使用 clone方法。

接口与回调

 

内部类

内部类(inner class)是定义在另一个类中的类。使用内部类有以下三点原因:

1)内部类方法可以访问该类定义所在作用域中的数据,包括私有的数据。

2)内部类可以对同一个包中的其他类隐藏起来。

3)当想要定义一个回调函数且不想编写大昊代码时,使用匿名(anonymous)内部类比较便捷。

 

 

 

代理

利用代理可以在运行时创建一个实现了一组给定接口的新类。这种功能只有在编译时无法确定需要实现哪个接口时才有必要使用。

要想创建一个代理对象,需要使用Proxy类的newProxyInstance方法。这个方法有三个参数:

1)一个类加载器(class loader)。

2)一个Class对象数组,每个元素都是需要实现的接口。

3)一个调用处理器。

还有两个需要解决的问题。如何定义一个处理器?能够用结果代理对象做些什么?当然这两个问题的答案取决于打算使用代理机制解决什么问题。使用代理可能出于很多原因,例如:

1)路由对远程服务器的方法调用。

2)在程序运行期间,将用户接口事件与动作关联起来。

3)调试时跟踪方法调用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息