当前位置:  技术问答>java相关

一个有关内部类的问题(送分)

    来源: 互联网  发布时间:2015-03-04

    本文导语:  我现在正在学习java对于内部类不是十分的理解 为何需要内部类 内部类的继承有何区别 讨论一下了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 内部类,有时叫做嵌套类,被附...

我现在正在学习java对于内部类不是十分的理解
为何需要内部类
内部类的继承有何区别

讨论一下了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

|
内部类,有时叫做嵌套类,被附加到JDK1.1及更高版本中。内部类允许一个类定义被放到另一个类定义里。内部类是一个有用的特征,因为它们允许将逻辑上同属性的类组合到一起,并在另一个类中控制一个类的可视性。
6.14.1  内部类基础
    下述例子表示使用内部类的共同方法:
1. import java.awt.*;
2. import java.awt.event.*; 
3. public class MyFrame extends Frame{ 
4.     Button myButton;
5.     TextArea myTextArea;
6.     int count;; 
7. 
8.     public MyFrame(){
9.         super("Inner Class Frame");
10.     myButton = new Button("click me");
11.     myTextArea = new TextArea(); 
12.     add(myButton,BorderLayout,CENTER); 
13.     add(myTextArea,BorderLayout,NORTH);
14.     ButtonListener bList = new ButtonListener(); 
15.     myButton.addActionListener(bList); 
16. } 
17. class ButtonListener implements ActionListener{ 
18.   public void actionPerformed(ActionEvent e){ 
19.   count ++ 
20.     myTextArea.setText("button clicked" + {
21.         count + "times");
22.   }
23. }// end of innerclass ButtonListener
24. 
25. public static void main(String args[]){ 
26.   MyFrame f = new MyFrame();
27.   f.setSize(300,300);
28.   f.setVisible(true);
29. }
30. } // end of class MyFrame 

    前面的例子包含一个类MyFrame,它包括一个内部类ButtonListener。编译器生成一个类文件,MyFrame$ButtonListener.class以及toMyFrame.class。它包含在MyFrame.class中,是在类的外部创建的。

6.14.2  如何做内部类工作?
    内部类可访问它们所嵌套的类的范围。所嵌套的类的成员的访问性是关键而且很有用。对嵌套类的范围的访问是可能的,因为内部类实际上有一个隐含的引用指向外部类上下文(如外部类“this”)。
1. public class MyFrame extends Frame{
2.     Button myButton;
3.     TextArea myTextarea;
4.     public MyFrame(){
5.       ......................
6.       ......................
7.       MyFrame$ButtonListener bList = new 
8.               MyFrame$ButtonListener(this); 
9.       myButton.addActionListener(bList); 
10.   }
11.   class MyFrame$ButtonListener implements 
12.   ActionListener{
13.   private MyFrame outerThis;
14.   Myframe$ButtonListener(MyFrame outerThisArg){ 
15.       outerThis = outerThisArg; 
16.   }
17.   
18.   public void actionPerformed(ActionEvent e) { 
19.   outerThis.MyTextArea.setText("buttonclicked"); 
20.   ......................
21.   ......................
22.   }
23.   public static void main(String args[]){
24.     MyFrame f = new MyFrame();
25.     f.setSize(300,300);
26.     f.setVisible(true);
27.   }
28. } 
    有时可能要从static方法或在没有this的某些其它情况下,创建一个内部类的一个实例(例如,main)。可以如下这么做:
public static void main(String args[]){
    MyFrame f = new MyFrame();
    MyFrame.ButtonListener bList =
          f.new ButtonListener(); 
    f.setSize(50,50);
    f.setVisible(true); 
}

6.14.3  内部类属性

内部类属性    类名称只能用在定义过的范围中,除非用限定的名称。    内部类的名称必须与所嵌套的类不同。    内部类可以被定义在方法中。    任何变量,不论是本地变量还是正式参数,如果变量被标记为final,那么,就可以被内部类中的方法访问。
    内部类有如下属性:
    类名称只能用在定义过的范围中,除非用在限定的名称中。内部类的名称必须与所嵌套的类不同。
    内部类可以被定义在方法中。这条规则较简单,它支配到所嵌套类方法的变量的访问。任何变量,不论是本地变量还是正式参数,如果变量被标记为final,那么,就可以被内部类中的方法访问。
内部类可以使用所嵌套类的类和实例变量以及所嵌套的块中的本地变量。
内部类可以被定义为abstract.
    属性
    只有内部类可以被声明为private或protected,以便防护它们不受来自外部类的访问。访问保护不阻止内部类使用其它类的任何成员,只要一个类嵌套另一个。
    一个内部类可以作为一个接口,由另一个内部类实现。
    被自动地声明为static的内部类成为顶层类。这些内部类失去了在本地范围和其它内部类中使用数据或变量的能力。
    内部类不能声明任何static成员;只有顶层类可以声明static成员。因此,一个需求static成员的内部类必须使用来自顶层类的成员。

|
实际上内部内的好处就是不用起一个类的名字和一个实例的名字。

|
就好像C++中的结构类型和枚举类型,完全可以没有,但提供了灵活性。而java的内部类更强,可以有方法,又可以承继。

|
内部类一般是用在GUI中作为一个匿名内部类进行事件处理,其它的应用,就我个人的经历来看的话还没有。SL275中也是放在GUI的事件处理部分讲述的。

|
Adapter pattern

    
 
 

您可能感兴趣的文章:

  • 求教有关smartupload的问题,有关就给分!!
  • 有关在sco unix5.0.4下有关网卡设置的问题(非常急,高分相送)
  • 有关snmp的一个很菜,但是困扰了我很久的问题,有关工作原理的,望大家赐教
  • 有关ResultSet的问题,帮助解决问题者另外加分...
  • (菜鸟问题)有关目录中文件执行的问题???
  • 有关Qt下编译的环境问题
  • 有关裁减内核及shell命令的问题
  • 有关cocoon的问题??
  • Helper! 有关Jbuilder使用问题???
  • 有关swing的问题,请高手回答
  • 一个有关分数的问题
  • 有关pcmaclan的打印机共享问题
  • 请教有关samba共享名大小写的问题
  • 想看一下吗?有关swing 组件的问题?
  • 有关L的问题(菜鸟求教)???
  • 有关jsp服务器的一个问题
  • java 进阶级问题,有关网络的问题,请多多帮助
  • 有关Liunx 的最低配置问题
  • 有关环境的问题
  • 请教有关konqueror 问题?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • ​有关Docker的八个令人难以置信的事实
  • 有关内码转换(跟HttpServletRequest有关)
  • 求有关png图像处理的libpng库的有关中文资料
  • 大家推荐一下有关LINUX7有关的网络编程的书。最好是比较全面的!比较经典的。
  • 有关KDevelop-3.0.4-0.1.i386.rpm的有关软件包
  • 有关KDevelop编程的资料
  • 有关集群与数据同步
  • 请教有关英文简历方面的词句!
  • 有关报表打印(在JAVA,WEB下应用)急用!
  • 请各位大哥告知JAVA中消息机制的有关资料,拜托!
  • 有关jbuilder
  • 我想看看有关Linux和Unix的源码,有什么好的建议
  • 有关J2ME的帮助文档!
  • 100分求助 能不能提供一些有关图像分割的算法和实现代码!谢谢
  • 在哪里可以弄到有关tomcat配置方面的资料?
  • 请问哪里有jboss有关配置的教程,最好是中文的,先谢了
  • 哪位兄弟知道有关QT的资料可以下,,谢谢!
  • 有关学习java的电子图书网址
  • 请介绍一本有关i386体系结构、汇编的书。
  • 有关shell返回值
  • 高分请教:请问怎么才能得到最近所有有关文件操作(新建,删除等)的记录


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3