给位高手帮帮忙啊。。。。关于内部类的问题 哪位大哥能帮忙解释一下内部类麽?? 稍微详细一点 最好附带一段代码 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.blogjava.net/sham2k/archive/2008/02/12/179678.html定义在一个类内部的类叫内部类,包含内部类的类称为外部类。内部类可以声明public、protected、private等访问限制,可以声明为abstract的供其他内部类或外部类继承与扩展,或者声明为static、final的,也可以实现特定的接口。static的内部类行为上象一个独立的类,非static在行为上类似类的属性或方法且禁止声明static的方法。内部类可以访问外部类的所有方法与属性,但static的内部类只能访问外部类的静态属性与方法。外部类按常规的类访问方式使用内部类,唯一的差别是外部类可以访问内部类的所有方法与属性,包括私有方法与属性。如: pinner p = new pinner(); p.index = 20; p.Print(); ---- 这种方式适合外部类的非static方法; pouter po = new pouter(); pinner pi = po.new pinner(); pi.index = 40; pi.Print(); ---- 这种方式适合外部类的static方法;内部类类似外部类的属性,因此访问内部类对象时总是需要一个创建好的外部类对象。内部类对象通过‘外部类名.this.xxx’的形式访问外部类的属性与方法。如: System.out.println("Print in inner Outer.index=" + pouter.this.index); System.out.println("Print in inner Inner.index=" + this.index);如果需要在其他类中访问内部类,可以使用:(1)外部类提供创建内部类的方法供其他类使用。如: // 外部类 pinner getInner() { return new pinner(); } // 其他类 pouter.pinner pi = po.getInner(); pi.Print();(2)直接创建内部类的对象。如: pouter po = new pouter(); pouter.pinner pi = po.new pinner(); pi.Print();内部类可以声明在外部类的方法中或语句块中。如果内部类需要访问包含它的外部类方法或语句块的局部变量或参数,则该局部变量或参数必须是final的。外部类的其他方法、其他类无法访问声明在方法内部或块内部的内部类。如果一个类继承内部类,则创建该类的对象时需提供一个外部类的对象作为构造方法的参数。如:class Car{ class Wheel { }}class SuperWheel extends Car.Wheel{ SuperWheel(Car car) { car.super(); } public static void main(String [] args) { Car car = new Car(); SuperWheel wl = new SuperWheel(car); } }如果创建命名的内部类没有多少实际意义时,可以创建匿名的内部类。比如使用内部类实现接口的功能(如事件处理器、适配器等),而功能的差异较大,需要根据实际的情况创建相应的内部类时,可以使用匿名内部类。简单的示例如下:interface WebView{ void doGet();}class A{ WebView ShowName() { return new WebView() { void doGet() { System.out.println("Name"); } }; } WebView ShowCode() { return new WebView() { void doGet() { System.out.println("Code"); } }; }}最后,JAVA 内部类还有一个作用,那就是实现JAVA的多继承。JAVA本身是不允许多继承的,如果我们想一个类继承多个基类,就可以使用内部类。通过内部类分别继承一个基类,外部类创建内部类的对象,并使用内部类的方法,变相地实现了多继承。 好处: 1 方便。内部类可以访问外部类的所有属性和方法(包括private的) 2 隐藏。便于隐藏某些“专用类”,如某个界面的监听器类,或某些容器的底层数据结构(如HashMap中的Entry)。 这些类只服务于某个特定的类,不需要外部的任何类知道该信息。隐藏能减少不必要的信息量。 3 便捷。如写Swing界面的事件监听,驱动时,可减少其当做外部类编写时的很多参数传递。其实也是方便。 4 效率。减少了类与类之间交互,少创建了一些对象。当然,这种效率的提升时微不足道的,甚至没有也是可能的。 5 某些情况下使程序变得优雅。 内部类有好处,但与此对应,缺点貌似更多。只宜在一些特殊的场合应用。 1 难以阅读。类中还有类,就像怀胎的女人,你一眼看去,个头有些大。便知道此中不简单。 2 类与类之间耦合度很高,难以扩展和维护。 光这2条,其实已够被现代OO大师们打入冷宫了。 但它既然存在,肯定还是有其应用价值的。 常用到内部类的地方:小型GUI程序里监听器类,比较器(Comparator),容器底层专用数据结构等等。 java编程思想这本书有一章专门介绍这个,很详细,下个电子书看看吧 高手帮忙写一个查询某个方法是哪个类的程序 用Java的JDBC连数据库(2005)时遇到的问题!! javaGUI字体讨论 问Java程序使用打印机时的中文问题 【求助】如何读取jar包外的配置文件 连接oracle总是报错,是何原因? 如何得到一个窗体移动的信息!! 下载运行的Applet保存在计算机什么地方? 在线,立即给分 关于BASE64 编码解密的问题,高分求解 关于数据存储的问题 swt中table组件不能刷新,求助!!! 大家用过ImageIO这个类吗?其中的wirte 方法不是很明白。
pinner p = new pinner();
p.index = 20;
p.Print();
---- 这种方式适合外部类的非static方法; pouter po = new pouter();
pinner pi = po.new pinner();
pi.index = 40;
pi.Print();
---- 这种方式适合外部类的static方法;内部类类似外部类的属性,因此访问内部类对象时总是需要一个创建好的外部类对象。内部类对象通过‘外部类名.this.xxx’的形式访问外部类的属性与方法。如:
System.out.println("Print in inner Outer.index=" + pouter.this.index);
System.out.println("Print in inner Inner.index=" + this.index);如果需要在其他类中访问内部类,可以使用:
(1)外部类提供创建内部类的方法供其他类使用。如:
// 外部类
pinner getInner()
{
return new pinner();
} // 其他类
pouter.pinner pi = po.getInner();
pi.Print();(2)直接创建内部类的对象。如:
pouter po = new pouter();
pouter.pinner pi = po.new pinner();
pi.Print();内部类可以声明在外部类的方法中或语句块中。如果内部类需要访问包含它的外部类方法或语句块的局部变量或参数,则该局部变量或参数必须是final的。外部类的其他方法、其他类无法访问声明在方法内部或块内部的内部类。如果一个类继承内部类,则创建该类的对象时需提供一个外部类的对象作为构造方法的参数。如:
class Car
{
class Wheel
{ }
}class SuperWheel extends Car.Wheel
{
SuperWheel(Car car)
{
car.super();
} public static void main(String [] args)
{
Car car = new Car();
SuperWheel wl = new SuperWheel(car);
}
}如果创建命名的内部类没有多少实际意义时,可以创建匿名的内部类。比如使用内部类实现接口的功能(如事件处理器、适配器等),而功能的差异较大,需要根据实际的情况创建相应的内部类时,可以使用匿名内部类。简单的示例如下:
interface WebView
{
void doGet();
}class A
{
WebView ShowName()
{
return new WebView()
{
void doGet()
{
System.out.println("Name");
}
};
} WebView ShowCode()
{
return new WebView()
{
void doGet()
{
System.out.println("Code");
}
};
}
}最后,JAVA 内部类还有一个作用,那就是实现JAVA的多继承。JAVA本身是不允许多继承的,如果我们想一个类继承多个基类,就可以使用内部类。通过内部类分别继承一个基类,外部类创建内部类的对象,并使用内部类的方法,变相地实现了多继承。
1 方便。内部类可以访问外部类的所有属性和方法(包括private的)
2 隐藏。便于隐藏某些“专用类”,如某个界面的监听器类,或某些容器的底层数据结构(如HashMap中的Entry)。
这些类只服务于某个特定的类,不需要外部的任何类知道该信息。隐藏能减少不必要的信息量。
3 便捷。如写Swing界面的事件监听,驱动时,可减少其当做外部类编写时的很多参数传递。其实也是方便。
4 效率。减少了类与类之间交互,少创建了一些对象。当然,这种效率的提升时微不足道的,甚至没有也是可能的。
5 某些情况下使程序变得优雅。 内部类有好处,但与此对应,缺点貌似更多。只宜在一些特殊的场合应用。
1 难以阅读。类中还有类,就像怀胎的女人,你一眼看去,个头有些大。便知道此中不简单。
2 类与类之间耦合度很高,难以扩展和维护。
光这2条,其实已够被现代OO大师们打入冷宫了。
但它既然存在,肯定还是有其应用价值的。
常用到内部类的地方:小型GUI程序里监听器类,比较器(Comparator),容器底层专用数据结构等等。