什么是内部类? Static Nested Class 和 Inner Class 的不一样。

什么是内部类? Static Nested Class Inner Class 的不一样。
        内部类就是在一个类的内部定义的类,内部类中不能定义静态成员(静态成员不是对象的特
性,只是为了找一个容身之处,因此须要放到一个类中而已,这么一点小事,你还要把它放
到类内部的一个类中,过度了啊!提供内部类,不是为让你干这种事情,无聊,不让你干。
我想多是既然静态成员相似 c 语言的全局变量,而内部类一般是用于建立内部对象用的,
因此,把全局变量放在内部类中就是毫无心义的事情,既然是毫无心义的事情,就应该被
禁止), 内部类能够直接访问外部类中的成员变量,内部类能够定义在外部类的方法外面,
也能够定义在外部类的方法体中,以下所示:
编程

public class Outer
{
int out_x = 0;
public void method()
{
Inner1 inner1 = new Inner1();
public class Inner2 //在方法体内部定义的内部类
{
public method()
{
out_x = 3;
}
}
Inner2 inner2 = new Inner2();
}
public class Inner1 //在方法体外面定义的内部类
{
}
}

 


         在方法体外面定义的内部类的访问类型能够是 public,protecte,默认的, private 4种类型,
这就好像类中定义的成员变量有4种访问类型同样,它们决定这个内部类的定义对其余类是
否可见;对于这种状况,咱们也能够在外面建立内部类的实例对象,建立内部类的实例对象
时,必定要先建立外部类的实例对象,而后用这个外部类的实例对象去建立内部类的实例对
象,代码以下:
eclipse

Outer outer = new Outer();
Outer.Inner1 inner1 = outer.new Innner1();

 


        在方法内部定义的内部类前面不能有访问类型修饰符,就好像方法中定义的局部变量同样,
但这种内部类的前面可使用 final abstract 修饰符。这种内部类对其余类是不可见的其
他类没法引用这种内部类,可是这种内部类建立的实例对象能够传递给其余类访问。这种内
部类必须是先定义,后使用,即内部类的定义代码必须出如今使用该类以前,这与方法中的
局部变量必须先定义后使用的道理也是同样的。这种内部类能够访问方法体中的局部变量,
可是,该局部变量前必须加 final 修饰符。
对于这些细节,只要在 eclipse 写代码试试,根据开发工具提示的各种错误信息就能够立刻
了解到。
        在方法体内部还能够采用以下语法来建立一种匿名内部类,即定义某一接口或类的子类的同
时,还建立了该子类的实例对象,无需为该子类定义名称:
工具

public class Outer
{
public void start()
{
new Thread(
new Runable(){
public void run(){};
}
).start();
}
}

 


        最后,在方法外部定义的内部类前面能够加上 static 关键字,从而成为 Static Nested Class
它再也不具备内部类的特性,全部,从狭义上讲,它不是内部类。 Static Nested Class 与普通
类在运行时的行为和功能上没有什么区别,只是在编程引用时的语法上有一些差异,它能够
定义成 publicprotected、默认的、 private 等多种类型,而普通类只能定义成 public 和默
认的这两种类型。在外面引用 Static Nested Class 类的名称为外部类名.内部类名。在外
面不须要建立外部类的实例对象,就能够直接建立 Static Nested Class,例如,假设 Inner
是定义在 Outer 类中的 Static Nested Class,那么可使用以下语句建立 Inner 类:
开发工具

Outer.Inner inner = newOuter.Inner();

 


       因为 static Nested Class 不依赖于外部类的实例对象,因此, static Nested Class 能访问
外部类的非 static 成员变量(不能直接访问,须要建立外部类实例才能访问非静态变量)
在外部类中访问 Static Nested Class 时,能够直接使用 Static Nested Class 的名字,而不
须要加上外部类的名字了,在 Static Nested Class 中也能够直接引用外部类的 static 的成员
变量,不须要加上外部类的名字。
       在静态方法中定义的内部类也是 Static Nested Class,这时候不能在类前面加 static 关键字,
静态方法中的 Static Nested Class 与普通方法中的内部类的应用方式很类似,它除了能够
直接访问外部类中的 static 的成员变量,还能够访问静态方法中的局部变量,可是,该局部
变量前必须加 final 修饰符。
 
spa

相关文章
相关标签/搜索