您的位置:首页 > 编程语言 > Java开发

JAVA的内部类

2015-07-10 00:04 686 查看
什么是内部类?

内部类就是定义在另一个类里面的类。与之对应,包含内部类的类被称为外部类

//外部类HelloWorld

<span style="font-size:14px;">public class HelloWorld{
//内部类Inner
public class Inner{
public void show(){
System.out.println("这是内部类Inner里面的show()方法");
}
}
public static void main(String[] args){
//创建外部类对象
HelloWorld hello = new HelloWorld();
//创建内部类对象
Inner inner = hello.new Inner();

}
}</span>


内部类的主要作用:

1.内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类

2.内部类的方法可以直接访问外部类的所有数据,包括私有的数据

3.内部类所实现的功能使用外部类同样可以实现,只是有时候使用内部类更方便

内部类有几种?

1.成员内部类

2.静态内部类

3.方法内部类

4.匿名内部类

一、成员内部类

成员内部类是最常见的内部类,也称为普通内部类

成员内部类的使用方法:

1.内部类可以使用任意的访问修饰符:如public、protected、private等

2.内部类可以直接访问外部类中的数据而不受访问修饰符的影响

3.如果内部类和外部类有相同的变量,在内部类中默认调用的变量是内部类的变量,如果想调用外部类的变量,用this关键字指代

4.内部类创建对象:内部类 对象 = 外部类对象.new 内部类();

5.外部类和内部类经过javac命令编译后,会产生两个.class文件:外部类.class 和 外部类$内部类.class

6.内部类可以直接使用外部类的变量和方法,但是外部类不可以直接访问内部类的成员和方法

二、静态内部类

1.静态内部类不能直接访问外部类的非静态成员,但可以通过new 外部类().成员的方式访问

2.如果外部类与内部类有相同的静态成员,对外部类的访问:外部类.静态变量 和 内部类.静态变量

3.创建内部类的对象时,不需要外部类的对象,可以直接创建:内部类 对象名 = new 内部类();

<span style="font-size:14px;">//外部类
public class Outer {
public int a = 99;//
static int b = 2;
//静态内部类
public static class Inner{
int b =2;
public void test(){
System.out.println("外部类a"+new Outer().a);
System.out.println("外部类b"+Outer.b);
System.out.println("内部类b"+new Inner().b);
}
}
public static void main(String[] args) {
//静态内部类可以直接实例化对象
Inner in = new Inner();
in.test();
}
}</span>


三、方法内部类

1.方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用

2.方法内部类不能在外部类的方法以外的地方使用

3.方法内部类不能使用访问控制符和static修饰符

<span style="font-size:14px;">//外部类
public class Outer{
//外部类中的方法
public void show(){
final int a=15;//常量
int b=13;//变量
//内部类
class Inner{
int c=2;//内部类中的变量
public void print(){
System.out.println("访问外部类中的方法中的常量a"+a);
System.out.println("访问内部类中的变量c"+c);
}
}
Inner in = new Inner();//创建方法内部类的对象
in.print();//调用内部类的方法
}
//测试方法内部类
public static void main(String[] args) {
Outer ou = new Outer();
ou.show();
}
}</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: