1.将一个类定义在另一个类的里面,对里面那个类就称为内部类,或者叫做内置类,嵌套类。
2.访问特点:内部类可以直接访问外部类中的成员,包括成员变量和成员方法,也包括私有成员;而外部类要访问内部类中的成员必须要建立内部类的的对象:代码体现如下:
class InnerclassDemo
{
}
class Outer
{
Outer.Inner
in=new
in.show();//直接访问内部类的方法
}
1、成员变量位置上,那么可以被private static成员修饰符修饰,具体功能属性等可以参考成员变量。而且被static修饰后的内部类只能访问外部类中的静态变量,就是你是静态的,你只能访问静态的,因为静态的是随着类的加载而被加载的,而非静态的是随着对象的建立而被封装的,所以它优先于静态而存在。
static:访问受到限制:
private:将内部类封装在了外部类中,不能为外部其他类之间访问
如果没有私有化,外部类可以直接访问到内部类,格式如下:
外部类名、内部类名变量名=外部类对象、内部类对象;
Outer.Inner in=new Outer().new Inner();
外部类直接访问静态内部类中的非静态成员:
new Outer.Inner.function();注意创建的是内部类的对象
外部类直接访问静态内部类中的静态变量:
Outer.Inner.function();可以直接用类名访问静态成员;
注意:该内部类中的成员是静态的,那么类也应该是静态的。
如果外部类静态成员访问该内部类成员时,内部类必须是静态的,否则无法访问;
2.在局部位置上,可以直接访问外部类中的成员,同时可以访问所有局部中的局部变量,但必须是被final修饰的,具体代码如下:
class InnerDemo
{
}
class Outer
{
}
//程序执行过程:首先main主函数、外部类Outer()构造方法,创建一个对象,将地址给引用ou,然后该对象调用Outer中的方法show();然后程序执行show(),内部类创建了一个对象,然后调用里面的method()方法,然后method()方法用调用被final修饰的局部变量。
也可以向show(final int a)传递一个final类型的参数,一样打印,因为都是局部变量:
3.匿名内部类,其实就是一种简写形式,它的前提是内部类必须继承一个其他外部父类或者接口,它是一个带内容的对象。代码体现如下:
class InnerclassDemo1
{
}
abstract class Abs
{
}
class Outer
{
}