一.内部类

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

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

使用内部类的主要原因:

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

使用内部类:

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++还是有很大的不同的,继续加油!!!