1 内部类
1.1 什么是内部类?
在Java中,还可以在类的内部定义类.这种在类的内部定义类,称为内部类.
在内部类所在的类称为外部类.
内部类属于Java高级编程的内容,使用非常灵活,掌握难度比较大.但合理使用它可以编写出更为优雅和高效的程序.
1.2 Java中的内部类共分为四种:
1.2.1 静态内部类
静态内部类:这是最简单的内部类形式,定义在另一个类中,同事加上static关键字,它不能和外部类同名.它只可以访问外部类的静态成员变量和静态方法(包括私有静态成员变量和静态方法).
实例化静态内部类对象的方式:
OutrerClass.InnerClass inner=new OuterClass.InnerClass();
1.2.2 成员内部类
成员内部类:同静态内部类相同,也是定义在另一个类中,但是定义时 不用static关键字,它可以访问外部类的所有成员变量和方法(包括静态和非静态).
实例化成员内部类对象的方式:
MenberInner.Inner inner= (new MenberInner()).new Inner();
MenberInner member=new MenberInner();
MenberInner.Inner inner2=menber.new Inner();
1.2.3 局部内部类
局部内部类:定义在方法中,比方法的使用范围更小,是内部类中最少使用的一种类型。
它像局部或者临时变量一样,不能被public,protected,private和static关键字修饰。它只能访问方法中的定义的final类型的局部变量。局部内部类在方法中定义,所以只能在方法中使用,即只能在方法中实例化局部内部类对象,并调用其定义的方法。
1.2.4 匿名内部类
匿名内部类是一种特殊的内部类,这种类没有名字。匿名内部类的定义与对象的创建合并在一起,整个动作看起来像产生对象似得。匿名内部类是为唯一对象而产生的类。
匿名内部类是一种特殊的内部类,是没有类名的局部内部类,不适用关键字class、extends等,且没有构造器。匿名内部类的定义和实例化对象时合并在一起的。匿名内部类是为实例化唯一对象而定义的类。当我们只需要实例化类的一个对象,而且不用类名时,使用匿名内部类可以使代码更简洁。*匿名内部类隐式地继承了一个父类或实现了一个接口。*匿名内部类在编程中使用得比较多,通常作为一个方法参数使用。
1.2.5 内部类的好处:
1、内部类可以很好的实现封装(数据隐藏),因为一般非内部类是不允许有private,protected访问权限,但内部内可以有。
2、内部类拥有外部类的所有成员的访问权限。
3、可以实现多重继承。
4、可以避免修改接口而实现同一个类中两种同名方法的调用。
1.3 多重继承
多重继承:指的是一个类可以同时从多余一个的父类那里继承成员变量和方法。Java为了保证数据安全,它只允许单继承。有些时候我们会认为如果系统需要使用多重继承往往都是糟糕的设计,这个时候我们往往需要思考的不是怎么使用多重继承,而是你的设计是否存在问题。但有时候我们确实是需要实现多重继承,而且现实生活中叶真正存在这样的情况。比如遗传,我们既继承了父亲的基因,叶继承了母亲的基因。而Java的设计者提供了两种方式让我们间接来实现多重继承。内部类和接口。
这个特点非常重要,它也是Java设计者设计内部类的最大的理由之一。正是由于内部类的存在使得Java的继承机制更加完善。(了解 )