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

Java学习笔记之内部类和匿名类

2015-10-31 16:26 435 查看
一.内部类

内部类就是定义在其他类内部的类,而内部类所在的类一般称之为外部类。根据内部类在外部类中所处的位置,一般又分为:定义在方法体内的内部类,以及定义在方法体外的成员内部类两种。

同时定义在方法体内的内部类又可以分为两种,分别是:有实例名称的内部类和无实名称的匿名内部类。

使用内部类的主要原因:

使用内部类对象能够访问其所在外部类的全部属性,包括私有属性;
内部类能够隐藏起来,不被哦同一包的其它类所见;
匿名内部类可以方便地定义运行时回调;
使用内部类编写事件驱动程序时会非常的方便。

使用内部类:

1.定义在方法外的内部类

(1)定义在方法体外的成员内部类

语法格式如下:

new 外部类构造方法.new 内部类构造方法();

外部类对象实例.new 内部类构造方法();

(2)对于静态内部类的引用

语法格式如下:

new 外部类名.内部构造方法();

2.定义在方法体内的内部类

由于附属于方法体,所以只能在方法体中创建对象实例,并且创建的实例也只能在方法体中被访问。所创建的对象实例的生命周期与方法相同,当方法结束后,对象也就随之消失。

示例:

public class InnerClassDemo3 {
private String str = "World";
public InnerClassDemo3()
{
showMessage();
}
public void showMessage()
{
System.out.println("Now you are in method:");
class InnerClass
{
public InnerClass()
{
System.out.println("This is Inner class constructor");
}
public void showMessage()
{
System.out.println("Hello " + str + "!");
}
}
InnerClass i = new InnerClass();
i.showMessage();
System.out.println("Method end!");

}
public static void main(String[] args) {
new InnerClassDemo3();
}

}


运行结果:
/*output:
Now you are in method:
This is Inner class constructor
Hello World!
Method end!
*///~

二,匿名类

在创建类的对象时,会有两种方式,第一种方式是创建对象后,将该对象保存在一个对象变量中,如下所示:

类名 对象名 = new 类构造方法();

另一种方式,就是所谓的匿名类方式创建对象。使用匿名类方式创建对象时,并不将创建出的对象保存在对象变量中。程序会根据创建对象的构造方法中的操作,来运行程序,当程序运行结束后,该对象生命周期也就结束了,如下所示:

new 类构造方法();

注意事项:

Java程序中,对于内部类的继承没有限制,与普通的类一致,满足单继承,同时对内部的类的嵌套层次也没有限制。

内部类同一般类一样,可以实现接口。

非静态的内部类可以看作是外部类中的普通方法,对整个类具有访问权限,可以访问其所在类的所有属性,包括private私有属性;但是非静态的内部类中不能包含static类型的属性。非静态的内部类可以被不同访问修饰符修饰,也可以被其他外部类的成员函数所访问。

静态内部类可以看作外部类中的static方法,只能访问声明为static的变量,以及调研static型的方法。

定义在方法体中的内部类,可以看作是方法中的局部变量,可以访问外部类中的所有属性,包括private型私有属性。

定义在方法体中的内部类,可以访问所在方法中被声明为final型的局部常量。

定义在方法体中的内部类,不能用任何访问修饰符修饰,同时也不能使用static修饰符修饰。

学习心得:

对于这些类和对象,学过C++的我却也只记得模糊的概念了。JAVA和C++还是有很大的不同的,继续加油!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息