一.内部类
内部类就是定义在其他类内部的类,而内部类所在的类一般称之为外部类。根据内部类在外部类中所处的位置,一般又分为:定义在方法体内的内部类,以及定义在方法体外的成员内部类两种。
同时定义在方法体内的内部类又可以分为两种,分别是:有实例名称的内部类和无实名称的匿名内部类。
使用内部类的主要原因:
- 使用内部类对象能够访问其所在外部类的全部属性,包括私有属性;
- 内部类能够隐藏起来,不被哦同一包的其它类所见;
- 匿名内部类可以方便地定义运行时回调;
- 使用内部类编写事件驱动程序时会非常的方便。
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++还是有很大的不同的,继续加油!!!