java 匿名类 静态内部类 内部类

本文深入探讨Java内部类的概念,包括内部类如何访问外部类成员、内部类与外部类的关联性,以及内部类的编译过程。此外还介绍了匿名内部类的应用场景及静态内部类的特点。

内部类

一个java程序就是一个的集合。

Eg

class EnclosingClass{

……..

Class ANestedClass{

………..}

}

1内部类在外部中有特权:内部类可以毫无限制地访问外部类的所有成员。外部类访问内部类时,必须先创建对象.

2编译之后,内部类也可产生单独的.class文件,文件名为:外部类名$内部类名.class

Eg

内部类使用示例

Public class OuterClass{

privateint x = 10;

classIntnerClass{

inty=20;

}

Public static void main(String[] args){

OuterClassoc=new OuterClass();

OuterClass.InnerClassic=oc.new InnerClass();

System.out.println(“Outer:x=”+oc.x);

System.out.println(“InnerClass:y=+ic.y”);

}

}

内部类是外部类的一个成员,内部类对象不能单独存在,它必须依赖一个外部对象

使用内部类在编写事件处理驱动的程序时用起来很方便。

只有内部类才能够是私有的安全机制,只有其外部类的方法才能创建内部内象。

匿名类、

如果只需要为内部类建立一个对象,甚至不必为该类指定一个名字,这种类被称为匿名内部类。

使用匿名内部类是比较合适的:

A只用到类的一个实例

B类在定义后马上用到

C类非常小(推荐在4行代码以下)

D给类命名并不会导致你的代码更容易被理解

Class 类名implementsActionListener{

Publicvoid actionPerformedActionEvent e{……..}

}

new 类名();

由于匿名内部类没有名称,因此创建匿名内部类对象时,new运算符后超类或接口的名称,其后的{}内部为匿名类的定义(匿名类对象的创建和匿名类的声明是在一起的)

匿名类不能是抽象类,因此系统在创建匿名类的时候,会立即创建匿名类的对象。因此不能是publicproundprivatestatic

只能创建匿名类的实例。

内部类

一个java程序就是一个的集合。

Eg

class EnclosingClass{

……..

Class ANestedClass{

………..}

}

1内部类在外部中有特权:内部类可以毫无限制地访问外部类的所有成员。外部类访问内部类时,必须先创建对象.

2编译之后,内部类也可产生单独的.class文件,文件名为:外部类名$内部类名.class

Eg

内部类使用示例

Public class OuterClass{

privateint x = 10;

classIntnerClass{

inty=20;

}

Public static void main(String[] args){

OuterClassoc=new OuterClass();

OuterClass.InnerClassic=oc.new InnerClass();

System.out.println(“Outer:x=”+oc.x);

System.out.println(“InnerClass:y=+ic.y”);

}

}

内部类是外部类的一个成员,内部类对象不能单独存在,它必须依赖一个外部对象

使用内部类在编写事件处理驱动的程序时用起来很方便。

只有内部类才能够是私有的安全机制,只有其外部类的方法才能创建内部内象。

匿名类、

如果只需要为内部类建立一个对象,甚至不必为该类指定一个名字,这种类被称为匿名内部类。

使用匿名内部类是比较合适的:

A只用到类的一个实例

B类在定义后马上用到

C类非常小(推荐在4行代码以下)

D给类命名并不会导致你的代码更容易被理解

Class 类名implementsActionListener{

Publicvoid actionPerformedActionEvent e{……..}

}

new 类名();

由于匿名内部类没有名称,因此创建匿名内部类对象时,new运算符后超类或接口的名称,其后的{}内部为匿名类的定义(匿名类对象的创建和匿名类的声明是在一起的)

匿名类不能是抽象类,因此系统在创建匿名类的时候,会立即创建匿名类的对象。因此不能是publicproundprivatestatic

只能创建匿名类的实例。

interfaceInner
{
voidmethod();
}
classTest
{
/*staticclassInnerClassimplementsInter
{
publicvoidmethod(){
System.out.println("method");
}
}*/
staticInterfunction(){bbbbbbbbb
returnnewInter(){
publicvoidmethod(){
System.out.println("method");
}
};
}
}


classInnerClassDemo3
{
publicstaticvoidmain(String[]args)
{
Test.function().method();
//System.out.println("HelloWorld!");
}
}

静态态内部类

定义为static的内部类称为静态内部类.静态内部类没有父类,不能引用外部类实例成员或其他类成员.

注意:

1静态内部类可以访问外部类的任一静态字段或静态方法

2像静态方法或静态字段一样,静态内部类有public/private/default权限修饰符

3静态内部类不能与外部类重名

4像外部类的静态方法一样,不能直接访问外部类的事例字段和实例方法

5静态内部类只能定义与外部类的某个函数中

如果一个静态内部去掉其生命中的static关键字,将其定义移入其外部类的静态方法或静态初始化代码段中,就成为了局部静态内部类。局部静态内部类于静态内部类的基本特性相同。Eg:都只能访问外部类的静态字段和方法。

静态内部类的使用

Public class StaticinnerClass{

publicstaticclassStudent{}

}

静态态内部类

定义为static的内部类称为静态内部类.静态内部类没有父类,不能引用外部类实例成员或其他类成员.

注意:

1静态内部类可以访问外部类的任一静态字段或静态方法

2像静态方法或静态字段一样,静态内部类有public/private/default权限修饰符

3静态内部类不能与外部类重名

4像外部类的静态方法一样,不能直接访问外部类的事例字段和实例方法

5静态内部类只能定义与外部类的某个函数中

如果一个静态内部去掉其生命中的static关键字,将其定义移入其外部类的静态方法或静态初始化代码段中,就成为了局部静态内部类。局部静态内部类于静态内部类的基本特性相同。Eg:都只能访问外部类的静态字段和方法。

静态内部类的使用

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值