内部类就是在一个类的内部定义的类,内部类中不能定义静态成员(静态成员不是对象的特性,只是为了找一个容身之处,所以需要放到一个类中而已,这么一点小事,你还要把它放到类内部的一个类中,过分了啊!提供内部类,不是为让你干这种事情,无聊,不让你干。我想可能是既然静态成员类似c语言的全局变量,而内部类通常是用于创建内部对象用的,所以,把“全局变量”放在内部类中就是毫无意义的事情,既然是毫无意义的事情,就应该被禁止),内部类可以直接访问外部类中的成员变量,内部类可以定义在外部类的方法外面,也可以定义在外部类的方法体中,如下所示:
package test;
/**
*
* Outer概要说明
* 测试内部类
*
* @author ycglei886
* @cjsj:2010/09/12
*
*/
public class Outer {
int $out = 0;
public void method() {
Outer outer = new Outer();
Outer.Inner1 inner1 = outer.new Inner1();
inner1.syso();
final class Inner2 { // 在方法体内部定义的内部类,可以使用final或abstract修饰符
final int $outer = 3; // 该局部变量前加final修饰符
public void method() {
$out = 4;
}
}
Inner2 inner2 = new Inner2();
inner2.method();
System.out.println(inner2.$outer);
}
public class Inner1 { // 在方法体外面定义的内部类
private void syso() {
final int $sys = 9;
System.out.println("Test Class!!");
System.out.println($sys);
}
}
public static void main(String[] args) {
Outer outer = new Outer();
System.out.println(outer.$out);
outer.method();
Outer.Inner1 inner1 = outer.new Inner1();
inner1.syso();
}
}
在方法体外面定义的内部类的访问类型可以是public,protecte,默认的,private等4种类型,这就好像类中定义的成员变量有4种访问类型一样,它们决定这个内部类的定义对其他类是否可见;对于这种情况,我们也可以在外面创建内部类的实例对象,创建内部类的实例对象时,一定要先创建外部类的实例对象,然后用这个外部类的实例对象去创建内部类的实例对象,代码如下:
Outer outer = new Outer();
Outer.Inner1 inner1 = outer.new Inner1();
在方法内部定义的内部类前面不能有访问类型修饰符,就好像方法中定义的局部变量一样,但这种内部类的前面可以使用final或abstract修饰符。
这种内部类对其他类是不可见的其他类无法引用这种内部类,但是这种内部类创建的实例对象可以传递给其他类访问。这种内部类必须是先定义,后使用,即内部类的定义代码必须出现在使用该类之前,这与方法中的局部变量必须先定义后使用的道理也是一样的。这种内部类可以访问方法体中的局部变量,但是,该局部变量前必须加final修饰符。
分享到:
相关推荐
什么是内部类? 在类中定义的类,称之为内部类。 Java中有几种内部类? 1、成员内部类:定义在类中的类,属于类的成员,创建成员内部类对象必须依赖外部类对象。 2、静态内部类:定义在类中的类,class 关键字前...
什么是内部类? 内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权限)...
26、什么是内部类?Static Nested Class 和 Inner Class的不同。 19 27、内部类可以引用它的包含类的成员吗?有没有什么限制? 20 28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以...
26、什么是内部类?Static Nested Class 和 Inner Class的不同。 19 27、内部类可以引用它的包含类的成员吗?有没有什么限制? 20 28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以...
4、什么是内部类?内部类的作用 5、进程和线程的区别 6、final,finally,finalize的区别 7、Serializable 和Parcelable 的区别 8、静态属性和静态方法是否可以被继承?是否可以被重写?以及原因? 9、成员内部...
26、什么是内部类?Static Nested Class 和 Inner Class的不同。 19 27、内部类可以引用它的包含类的成员吗?有没有什么限制? 20 28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以...
26、什么是内部类?Static Nested Class 和 Inner Class的不同。 20 27、内部类可以引用它的包含类的成员吗?有没有什么限制? 22 28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以...
26、什么是内部类?Static Nested Class 和 Inner Class的不同。 19 27、内部类可以引用它的包含类的成员吗?有没有什么限制? 20 28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以...
- 不同类型的内部类(静态内部类、成员内部类、局部内部类和匿名内部类)的区别和用法 - 内部类的优缺点以及使用场景 这些目标将帮助你理解和掌握内部类的概念,并能够在适当的时候使用内部类来解决问题...
29、为什么需要内部类? 20 30、内部类可以引用它的包含类的成员吗?有没有什么限制? 21 31、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 21 33、...
26、什么是内部类?Static Nested Class 和 Inner Class的不同。 27、内部类可以引用它的包含类的成员吗?有没有什么限制? 28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以...
Handler对象中使用匿名内部类或非静态内部类正确地释放消息避免内存泄漏或增加Native内存,在Android中,Handler对象通常会被用来在主线程(UI线程)中处理消息,以更新UI界面。当我们在Handler对象中使用匿名内部类...
内部类分类
java 内部类 实例内部类 局部内部类 匿名类 静态内部类 实例代码
java内部类,相信很多人都使用过内部类,新建线程使用的匿名内部类,但是有很多人对内部类的一些概念处于模糊阶段,比如为什么方法内部类引用方法参数,方法参数必须设置为final,所以本文系统得整理了一下内部类...
1.接口-简介 2.接口-作用 3.接口-定义方式 4.接口-实现 5.接口-与抽象类之区别 6.接口-应用示例(设计模式...内部类-局部内部类 12.内部类-匿名内部类 13.内部类-静态内部类 14.综述
相关android开发中内部类 匿名内部类 内部接口 对比说明
26、什么是内部类?Static Nested Class 和 Inner Class的不同。 19 27、内部类可以引用它的包含类的成员吗?有没有什么限制? 20 28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以...
java 成员内部类使用 内部匿名类 方法参数匿名类 方法匿名类