今天我们要说的是了解一个新名词首先就要了解它的定义:在某些情况下,我们把一个类放在另外一个类的内部定义,定义在其他类内部的类就称为内部类也叫嵌套类,包含内部类的类称为外部类也叫宿主类。内部类又分为成员内部类和静态内部类。它能提供更好的封装,从而把自己隐藏在外部类之中。不允许其他类访问,这样就很有效的减少了无意义的源文件的数量。
上面是定义和优点,接下来说一下内部类的特性。内部类编译完成后会产生.class文件,文件名称是”外部类名称$内部类名称.class”;因为内部类被当成其外部类成员,所以内部类可以直接访问外部类的私有数据,但是外部类却不能直接访问内部类的实现细节。
我们知道内部类分为成员内部类和静态内部类。我们先看一下成员内部类是什么?当非静态内部类的方法内访问某个变量时,优先在该方法中查找是否存在该变量,存在则使用,如果不存在,则到该方法所在的内部类中查找,存在则使用,如果不存在,则到该内部类所在的外部类中查找,存在则使用,不存在则编译错误。因此,如果三者存在同名变量,可以使用this、外部类类名.this来限定区分。
成员内部类还有这么两点注意事项,需要大家了解一下:Java不允许在非静态内部类中定义静态成员,也就是说不能包含静态方法,静态Field,静态代码块,但可以有静态常量static final;根据静态成员不能访问非静态成员的规则,外部类的静态方法,静态代码块不能访问非静态内部类,需要通过实例访问。
然后是静态内部类。怎么定义呢?如果一个内部类使用static声明,那么此内部类就称为静态内部类。它又有哪些特性呢?静态内部类属于外部类的类成员,创建时不用创建外部类实例对象;静态内部类可以直接访问宿主类的静态变量,如果要访问宿主类的成员变量,必须通过宿主类的实例对象访问;静态内部类可以包含静态变量、静态方法、static block,实例变量,实例方法,block;外部类可以通过类名直接访问静态内部类的类变量,通过实例访问实例变量,不管变量是否私有化。
对上面的各种定义,特性及优点有一个粗略的了解就可以了。重要的是理解,理解了之后就好记好学了。
希望各位点赞转发支持一下,如果想要学习到更多的Java知识可以添加我
作者QQ:2381840694
Q群:472052538