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)调试时跟踪方法调用。
前面的章节已经学习了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)调试时跟踪方法调用。
相关文章推荐
- Java的基础语法学习笔记
- 学习笔记之javaweb基础:jsp基本语法,内置对象,对JavaBean的操作语法
- 黑马程序员-学习笔记java基础-基本语法
- java学习笔记--基础语法
- Java基础学习笔记九 Java基础语法之this和super
- Java学习笔记二(基础语法)
- JAVA学习笔记——JAVA基础语法(六)
- JAVA学习笔记-JAVA基础语法
- java基础语法学习笔记(四)
- 第三天04 JAVA基础语法(运算符)(学习笔记)
- Java基础学习笔记十 Java基础语法之final、static、匿名对象、内部类
- JAVA学习笔记——JAVA基础语法(二)
- JAVA学习笔记——JAVA基础语法(五)
- java 学习笔记(入门篇)_java的基础语法
- Java学习笔记:java基础语法
- 第五天02 JAVA基础语法(认识对象)(学习笔记)
- Java基础学习笔记_基础语法2
- [转]CoreJava学习笔记_Java语法基础
- 黑马程序员ava学习笔记——java语法基础知识
- JAVA学习笔记——JAVA基础语法(三)——面向对象三大特征