Java中的内部类

在一个类中定义另外一个类,这个类就叫做内部类或者内置类(inner class)。内部类可以让我们将逻辑上相关的一组类组织起来,并由外部类(outer class)来控制内部类的可见性。当我们建立一个inner class时,其对象就拥有了与外部类对象之间的一种关系,这是通过一个特殊的this reference形成的,使得内部类对象可以随意的范文外部类中所有的成员。

内部类结论:

1、内部类是一个单独的类,在内部类当中可以访问外部类当中的私有变量。

2、内部类访问属性的顺序是,先搜索内部类属性域,再搜索外部类属性域。

3、内部类的特殊语法规则:

- 访问外部类属性的语法为OuterClass.this.Property,访问内部类属性的语法为this.Property(当然,如果没有冲突,则不需要加前缀,直接Property就可以了)。

- 在外部类作用域之外,可以这样引用内部类:OuterClass.InnerClass,意思是,在外部类之外也可以定义一个内部类的对象,具体可以参见实例代码,关键点在于,在外部类之外的类需要继承外部类,才能定义内部类的对象。

4、在外部类作用域之外,不能直接访问内部类,要产生一个内部类,必须先初始化一个外部类。

5、可以在方法中定义内部类,如果要访问方法中定义的本地变量或者方法的参数,则变量或方法的参数必须定义为final。不过,此内部类可以直接访问外部类的方法。

6、内部类可以声明为private或protected;还可以声明为abstract或final。

7、若内部类声明为静态类,则只能访问外部类的静态变量和静态方法。

8、非静态的内部类是不能定义任何一个静态方法的。

内部类的例子代码,包含了以上内部类的结论:

class OuterClass

{

private int TestInt=32767;

//非静态内部类

class InnerClass

{

public InnerClass()

{

//内部类可以访问外部类的任何内容(通过特殊的this指针),如果内部类的属性或方法名与外部类冲突,则优先使用内部类中的定义。

System.out.println("这里是非静态内部类,获取外部类的私有变量的值:TestInt="+TestInt);

}

}

/*静态内部类

* 静态内部类只能调用外部类中的静态属性和静态方法

*/

static class InnerStaticClass

{

public static void About()

{

System.out.println("这里是静态内部类,被外部类直接调用。");

}

}

//final型的方法,供局部内部类调用

private void FunctionClassTest()

{

System.out.println("这里是外部类的方法FunctionClassTest,被局部内部类调用。");

}

public void showMessage()

{

final int a=0;

int b=1;

//局部内部类,访问方法中定义的本地变量或者方法的参数,需要把变量或方法的参数声明为final,如果访问外部类的方法,则可以直接调用。

class FunctionClass

{

public FunctionClass()

{

System.out.println("这里是局部内部类,定义在showMessage方法中,访问方法中定义的本地变量或者方法,需要把变量或方法声明为final。");

System.out.println("这里是局部内部类,访问本方法中的final类型的a变量:a="+a);

FunctionClassTest();

}

}

//创建局部类对象

new FunctionClass();

//调用静态类中的静态方法

InnerStaticClass.About();

}

}

public class InnerClassExercise extends OuterClass{

/**

* @param args

*/

public static void main(String[] args){

/*在与OuterClass无关的类中创建OuterClass类中的内部类InnerClass的对象。

* 注意,在上面还必须继承OuterClass类,即: extends OuterClass。

*/

InnerClass A=new OuterClass().new InnerClass();

OuterClass B=new OuterClass();

B.showMessage();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值