Java内部类

—— 你放心去浪,我替你说谎。对象

1、内部类与外部类之间的关系接口

一、内部类定义于外部类中,是一个相对独立的实体,对该外部类文件进行编译,会产生两个.class文件,其中内部类的.class文件名名称为  外部类名$内部类名.class。get

二、内部类能够访问外部类的全部方法和属性,即便是私有,这是由于内部类持有一个外部类的一个引用。外部类没法直接访问内部类的属性和方法,必须经过内部类的对象引用才能进行访问,若是是静态内部类,外部类能够经过内部类的类名来引用静态变量。编译

三、内部类若是要声明静态变量,内部类必须声明为静态类。class

 

2、非静态内部类对象的建立变量

一、在外部类以外建立内部类对象,须要先建立外部类对象,在经过外部类对象调用内部类的构造方法进行实例化。外部类对象只能调用内部类的构造方法,非构造方法以及元素必须经过内部类引用才能调用。引用

二、若是在外部类内部建立内部类对象,能够直接调用内部类的构造方法进行建立。构造方法能够被外部类调用,其余方法和属性必须经过内部类引用或类名才能调用。方法

 

3、内部类的分类static

一、成员内部类:定义在外部类中的普通类(非static),属于外部类的成员,能够访问外部类的任何变量和方法。文件

二、局部内部类:定义在外部类的局部范围内,例如定义在方法中,只容许在方法中访问该内部类,不容许在方法外访问。局部内部类通常用在用于辅助解决问题而又不但愿建立一个公共类的场景。

三、匿名内部类:匿名内部类是没有类名的局部内部类,所以它没有构造方法,必须定义在方法中,不能用访问修饰符修饰,不能具备静态成员,必须实现抽象类或者接口。

四、静态内部类:非静态内部类在编译完成后会拥有外部类的一个引用,所以它能够调用外部类的全部属性方法,同时,非静态内部类不能拥有静态变量。静态内部类没有拥有外部类的引用,静态内部类只能调用外部类的静态成员,不能访问非静态成员,外部类能够直接调用静态内部类的成员

 

4、内部类的建立

一、外部类外:经过外部类实例来调用new InnerClass()进行实例化

二、外部类内:new InnerClass(),对于静态内部类,不须要借助外部类实例进行建立,对于非静态内部类,须要借助外部类实例才能建立。

class Test{ public static void getInnerClass1(){ new InnerClass1();//不须要借助外部类实例建立 } static class InnerClass1{ } public static void getInnerClass2(){ new Test(). new InnerClass2();//须要借助外部类实例建立 } class InnerClass2{ }}

相关文章
相关标签/搜索