闲谈编程之 Java内部类

来源:互联网 发布:ubuntu安装chrome 编辑:程序博客网 时间:2024/05/01 06:42

——内部类可真是了不起的创造,同时也是让你写的程序乱糟糟的最好方法


// 这是某个类的一个方法,省略类的定义public Runnable getThreadHeader () {return new Runnable() {  public void run() {   long count = 0;   while(true) {    System.out.println(count);    try{ sleep(1000); } catch(Exception e){}   }  }}}


如果你也能用记事本不看帮助文档正确的写下,这样的程序,那么继续看下去的意义不大了,否则如果你正在学习Java,你一定很想知道这段代码究竟有何意义。


首先这是一个函数(相对方法,我比较喜欢“函数”这个词)
public Runnable getThreadHeader () {  return xxxxx}


从函数的声明部分来看,这个函数返回了一个Runnable对象,在Java里,这是一个线程接口,而这个函数返回了一个Runnable接口的实现,那么函数内部作了什么呢:
new Runnable() {}


这是一个建立匿名对象的语法,其实如果没有后面的一对括号{},你一下就明白了,这明明使通过类新建对象的语法,而这里却new出一个接口,这是不允许的,又知道实现接口的类,必须实现接口中所有的方法,所以,必须在new出接口的同时,实现接口的方法,于是就出现了开头的程序段,最终函数返回了Runnable接口的对象呢,这是匿名内部类,经常会在简短的实现中被使用,他们只作一些简单的事情
当事情变得复杂,足够抽象出一个完整的类,并且之作为另一个类的辅助设施存在,就需要一个有名的内部类,它的语法好像这样:
class A {  class B{}}


根本就是在一个类里面,直接定义另一个类,不同点在于,类B不能独立存在除非B被定义为static, 就是说,只有类A才能直接创建类B的实例,外部类只能通过引用来访问类B,但是出于实际的应用来考虑,一般内部类都是私有的,作为辅助设施而提供,因为类B可以作为A的成员访问A的所有成员(包括私有的)

不要过多地使用内布类,它会影响程序的美观,过多层次的缩进,会破坏视觉上的平衡,同时也会让程序的逻辑,变得复杂,为何不单独的定义一个类呢?



0 0
原创粉丝点击