MyException - 我的异常网
当前位置:我的异常网» J2SE » 为什么要使用内部类解决方案

为什么要使用内部类解决方案

www.MyException.Cn  网友分享于:2013-03-01  浏览:8次
为什么要使用内部类
RT
看有的提到说是
1.“控制框架”。
2.像C++样,实现“变相”的多继承。
很迷惑~

------解决方案--------------------
1、内部类可以访问它所在作用域内的数据,包括私有数据
2、在同一个包中,内部类对于其他类不可见
3、使用匿名内部类可以在写回调函数时,减少代码量
------解决方案--------------------
可以参考下内部类的特性:
实例内部类可以直接访问嵌套类的成员。如果是定义在方法中的局部内部类,还可以访问该方法中的final型的局部变量和final型的方法参数。
静态内部类只能直接访问所嵌套类的静态成员,而不能直接访问所嵌套类的非静态的成员,如果一定要访问,必须通过外部嵌套类的实例访问。
实例内部类不能声明任何static成员;静态内部类中可以声明static成员。

------解决方案--------------------
1.有一些类的变量,它只希望被特定的类访问,不想把变量设成public,而内部类可以调用外部类的所有信息,包括私有的。
2.对类的封装,隐藏内部类的代码实现。只有通过外部类得到想到的数据。
我就知道这两个。
------解决方案--------------------
好处:
1 方便。内部类可以访问外部类的所有属性和方法(包括private的)
2 隐藏。便于隐藏某些“专用类”,如某个界面的监听器类,或某些容器的底层数据结构(如HashMap中的Entry)。
这些类只服务于某个特定的类,不需要外部的任何类知道该信息。隐藏能减少不必要的信息量。
3 便捷。如写Swing界面的事件监听,驱动时,可减少其当做外部类编写时的很多参数传递。其实也是方便。
4 效率。减少了类与类之间交互,少创建了一些对象。当然,这种效率的提升时微不足道的,甚至没有也是可能的。
5 某些情况下使程序变得优雅。

内部类有好处,但与此对应,缺点貌似更多。只宜在一些特殊的场合应用。
1 难以阅读。类中还有类,就像怀胎的女人,你一眼看去,个头有些大。便知道此中不简单。
2 类与类之间耦合度很高,难以扩展和维护。
光这2条,其实已够被现代OO大师们打入冷宫了。
但它既然存在,肯定还是有其应用价值的。
常用到内部类的地方:小型GUI程序里监听器类,比较器(Comparator),容器底层专用数据结构等等。

内部类是一个不小的话题。跟多信息请google.
------解决方案--------------------
大家已接触了对内部类的运作进行描述的大量语法与概念。但这些并不能真正说明内部类存在的原因。为什么Sun要如此麻烦地在Java 1.1里添加这样的一种基本语言特性呢?答案就在于我们在这里要学习的“控制框架”。
  
  一个“应用程序框架”是指一个或一系列类,它们专门设计用来解决特定类型的问题。为应用应用程序框架,我们可从一个或多个类继续,并覆盖其中的部分方法。我们在覆盖方法中编写的代码用于定制由那些应用程序框架提供的常规方案,以便解决自己的实际问题。“控制框架”属于应用程序框架的一种非凡类型,受到对事件响应的需要的支配;主要用来响应事件的一个系统叫作“由事件驱动的系统”。在应用程序设计语言中,最重要的问题之一便是“图形用户界面”(GUI),它几乎完全是由事件驱动的。正如大家会在第13章学习的那样,Java 1.1 AWT属于一种控制框架,它通过内部类完美地解决了GUI的问题。
  
  为理解内部类如何简化控制框架的创建与使用,可认为一个控制框架的工作就是在事件“就绪”以后执行它们。尽管“就绪”的意思很多,但在目前这种情况下,我们却是以计算机时钟为基础。随后,请熟悉到针对控制框架需要控制的东西,框架内并未包含任何特定的信息。首先,它是一个非凡的接口,描述了所有控制事件。它可以是一个抽象类,而非一个实际的接口。由于默认行为是根据时间控制的,所以部分实施细节可能包括:
  
  //: Event.java
  // The common methods for any control event
  package c07.controller;
  
  abstract public class Event {
   private long evtTime;
   public Event(long eventTime) {
    evtTime = eventTime;
   }
   public boolean ready() {
    return System.currentTimeMillis() >= evtTime;
   }
   abstract public void action();
   abstract public String description();
  } ///:~
  
  希望Event(事件)运行的时候,构建器即简单地捕捉时间。同时ready()告诉我们何时该运行它。当然,ready()也可以在一个衍生类中被覆盖,将事件建立在除时间以外的其他东西上。
  
  action()是事件就绪后需要调用的方法,而description()提供了与事件有关的文字信息。
  
  下面这个文件包含了实际的控制框架,用于治理和触发事件。第一个类实际只是一个“助手”类,它的职责是容纳Event对象。可用任何适当的集合替换它。而且通过第8章的学习,大家会知道另一些集合可简化我们的工作,不需要我们编写这些额外的代码:
  
  //: Controller.java
  // Along with Event, the generic
  // framework for all control systems:
  package c07.controller;
  
  // This is just a way to hold Event objects.
  class EventSet {
   private Event[] events = new Event[100];
   private int index = 0;
   private int next = 0;
   public void add(Event e) {
    if(index >= events.length)
     return; // (In real life, throw exception)
    events[index++] = e;
   }
   public Event getNext() {
    boolean looped = false;
    int start = next;
    do {
     next = (next + 1) % events.length;
     // See if it has looped to the beginning:
     if(start == next) looped = true;
     // If it loops past start, the list 
     // is empty:
     if((next == (start + 1) % events.length)
       && looped)
      return null;
    } while(events[next] == null);
    return events[next];
   }
   public void removeCurrent() {
    events[next] = null;
   }
  }
  
  public class Controller {

文章评论

一个程序员的时间管理
一个程序员的时间管理
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
Java程序员必看电影
Java程序员必看电影
编程语言是女人
编程语言是女人
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
程序员必看的十大电影
程序员必看的十大电影
老程序员的下场
老程序员的下场
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
程序员都该阅读的书
程序员都该阅读的书
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
漫画:程序员的工作
漫画:程序员的工作
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
总结2014中国互联网十大段子
总结2014中国互联网十大段子
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
每天工作4小时的程序员
每天工作4小时的程序员
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
10个调试和排错的小建议
10个调试和排错的小建议
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
代码女神横空出世
代码女神横空出世
那些争议最大的编程观点
那些争议最大的编程观点
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
 程序员的样子
程序员的样子
程序员应该关注的一些事儿
程序员应该关注的一些事儿
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
鲜为人知的编程真相
鲜为人知的编程真相
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
我的丈夫是个程序员
我的丈夫是个程序员
旅行,写作,编程
旅行,写作,编程
为什么程序员都是夜猫子
为什么程序员都是夜猫子
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
程序员的鄙视链
程序员的鄙视链
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
如何成为一名黑客
如何成为一名黑客
我是如何打败拖延症的
我是如何打败拖延症的
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有