Java接口和内部类的探究 |
2012-06-18 15:59 作者:高本峰 来源:硅谷网-《硅谷》杂志 HV: 编辑:GuiGu 【搜索试试】
|
|
摘要:Java的接口是Java语言中存在的结构,在特定的语法和结构,它是指一个类所具有的方法的特征的集合,是一种逻辑上的抽象。接口存在的意义是什么呢,正是有接口使得Java的继承性有很大的扩展,从单继承变成多继承。接口本身相当稳定,但是当接口一旦制定完成之后,就不能够随意更改,否则的话会对外面使用者和系统本身造成很大的影响。
JAVA内部类是指在一个相对外部类的内部定义的一个类。可以说内部类作为外部类的一部分,并且依附于外部类而存在。这和外部类的方法以及属性是同属于一个级别的,内部类可以拥有外围类所有元素的访问权限。可以实现多重的继承,避免修改接口可以实现同一个类中两种同名方法的调用。使用内部类的最重要的一个原因是:每一个内部类能够独立的承担一个接口的实现,所以不管外围类是否继承某个接口的实现,这对于内部类是没有影响的。
总体而讲,对所有Java开发工程师来说,接口和内部类是在项目开发中的有重要的地位,这里做对于Java接口和内部类的一些相关情况的探究,分析和总结。
关键词:Java;接口;内部类
中图分类号:TP312文献标识码:A文章编号:1671—7597(2012)0510
【《硅谷》杂志2012年5月刊文】
0引言
作为Java的接口,每一个单一的对象都有一个对应的访问接口,对于没有接口的对象是无法操作的。在声明了一个类的时候,首先考虑的是能够想这个对象做哪些操作,至于说实现的方法途径,可以不用大为关心,只要在意调试以后的现象就可以了,重视对象的功能,不是重视是怎么实现的。首先确定了接口,这个对象存在的功能,接着就是怎么实现这个接口,比如通信类,频道的转换,上一频道,下一频道,音量的调节,增大音量,降低音量等。
Java在创建接口的时候(interface),接口中的方法是抽象的。为什么会这样呢?这是由于接口提供了产品必须具备的功能,却没有产品功能的实现。接口最主要的作用就是达到的统一访问,创建对象的时候使用接口创建,想用哪个类的对象就可以创建声明那个类的对象,不用更改原来的代码,带来了很大的方便性,便捷性。
简单的内部类的定义是这样的:classa{classb{}}这样的类称为内部类,也有的称为内隐类。对于一个内部类的对象来讲,它能够访问创建它的外部类对象的所有属性和方法这也包括私有部分。在同一个包中的其他类来说,它的内部类是能够隐藏起来。在内部类中定义一个private类型的class,在这个时候,这个编译器是把这个类看做这个“顶级类”时,不能够使用private只能用friendly或者public。内部类它是一个相对独立的类,编译之后内部类就会翻译成相关独立的.class文件,前面要冠以外部类的类命和$符号。
内部类是可以定义在方法中的,称为局部的内部类,通常它只是用final常量,被称为局部内部类。总体而讲,内部类是Java语言中的一种特殊的语法,简而言之,它就是在一个类的内部在创建一个类,这个创建在类的内部的类就被称作是内部类。在创建的时候内部类是可以创建在类的内部,类的方法内部,也可以创建在类结构方法的内部,而且内部类创建的语法格式和其他类的创建也是一样的,不同点在于内部类的创建时可以使用static修士符进行相关的修饰。
1接口的继承
Interface是可以继承的,而且可以多继承。比如:
publicinterfacea{
intfun1();
}
publicinterfacebextendsa{
intfun2();
}
这里面,b接口的实现方法其实有两个,fun1和fun2,在实现b接口的类的时候,需要实现的是a和b两个接口的方法,也就是可以简单的概括成,只要b接口实现了,也就实现了a接口。
2接口名字的冲突
名字冲突的主要发生在两个接口的方法,类本的方法和接口的方法中。
interfacea{
voidfun();
}
interfacebextendsa{
intfun();
}
可以看出在b接口中声明的方法和a接口的同名,但是有一点不同就是返回值。这个问题说明了在b接口中是存在名字和参数列表相同的,返回值不相同的两个方法。所以这是不允许的。因为如果返回值相同,编译器正确。
interfacea{
voidfun();
}
interfaceb{
intfun();
}
classMyClassimplementsa,b{
......
}
MyClass这个类实现的是两个接口,但是可以看出这两个接口中存在了名字冲突,所以也不可以通过编译。
3局部内部类
首先最重要的一点是局部内部类不能够使用相关的修饰符进行修饰,这是由于它是在创建它的域的内部是可见的,Java允许在方法,构造器以及任意的作用域内部创建内部类,而且局部内部类同样拥有外部类的引用,它能够使用所有作用域的局部变量和方法参数,有一个要求它们是final的。
publicclassOuter{
publicOuter(){
classInner1{}
booleanb=true;
if(b){
classInner2{}
}
}
publicvoidfun(finalinta){
finalintb=20;
classInner3{
publicvoidfun(){
intc=a+b;
}
}
}
}
4静态内部类(嵌套类)
嵌套类一般是在不需要内部类对象和外部类对象之间有联系时产生的,可以把内部类声明为static。嵌套类没有外部类的引用,所以它和普通的内部类是不同的。但是它能够访问相关外部类的静态属性和方法。嵌套类和普通类的另一个区别在于普通内部类的字段与方法,只能放在类的外部层次上,就是说普通的内部类不能有static数据和static字段,也不能包含嵌套类,但是这些东西可以包含在嵌套类中。
publicclassOuter{
......
publicstaticclassInner{
......
}
}
在其他类中创建嵌套类对象比较简单,其格式如下:
Outer.Inneroi=newOuter.Inner();
5总结
接口和内部类都是很重要的概念,在Java中占有很大的地位。接口是对象的访问入口,没有接口就没有办法进行深入的操作。接口中的属性必须在声明的时候直接进行初始化。接口的继承和接口的名字冲突这些都是很重要的方向。内部类提供了某种进入外围类的窗户,所以这也是最吸引人的原因,每一个内部类都能够独立的继承一个接口,不管外围类是否已经继承了某个接口。所以内部类是Java中最复杂最深奥的概念之一,内部类的设计就是为了弥补Java的不足,可以实现很好的隐藏,它拥有外部类所有元素的访问权限,并且实现多重继承,所以在实际的项目开发过程中内部类是有重要的意义的。在学习中我们也应该重视它。
参考文献:
[1]BruceEckel,Java编程思想,机械工业出版社,2007.
[2]李兴华,Java开发实战经典,清华大学出版社,2009.
[3]谭浩强,Java编程技术,北京:人民邮电出版社,2003.
作者简介:
高本峰,电子信息工程专业,主要学习C语言,嵌入式,Java开发。(注:本文版权归作者本人和硅谷杂志所有,禁止他人未经授权转载)
|
|
|
|
【对“Java接口和内部类的探究”发布评论】 |
版权及免责声明:
① 本网站部分投稿来源于“网友”,涉及投资、理财、消费等内容,请亲们反复甄别,切勿轻信。本网站部分由赞助商提供的内容属于【广告】性质,仅供阅读,不构成具体实施建议,请谨慎对待。据此操作,风险自担。
② 内容来源注明“硅谷网”及其相关称谓的文字、图片和音视频,版权均属本网站所有,任何媒体、网站或个人需经本网站许可方可复制或转载,并在使用时必须注明来源【硅谷网】或对应来源,违者本网站将依法追究责任。
③ 注明来源为各大报纸、杂志、网站及其他媒体的文章,文章原作者享有著作权,本网站转载其他媒体稿件是为传播更多的信息,并不代表赞同其观点和对其真实性负责,本网站不承担此类稿件侵权行为的连带责任。
④ 本网站不对非自身发布内容的真实性、合法性、准确性作担保。若硅谷网因为自身和转载内容,涉及到侵权、违法等问题,请有关单位或个人速与本网站取得联系(联系电话:01057255600),我们将第一时间核实处理。
|
|
|
|