将一个类定义在另一个类的里面,对里面那个类就称为内部类(内置类,嵌套类)。当我们在描述一个事物时,如果事物的内部还有事物,该事物就可以用内部类来描述。因为内部事务在使用外部事物的内容。这样的目的是不想把内务的事物单独分化出来,这样可以避免其他类对其进行时实例化,就算是要访问,必须经过该内部类的外部类的同意。在大学的课堂里,并没涉及此方面的内容,。该方面的知识点给了我很大困惑。现在看来也只是Java为了提供更加适合需求而封装的一种资源形势。同样有成员变量和访问的方式,与平常的类在本职上并无二异。她的访问特点:内部类可以直接访问外部类中的成员,包括私有成员。之所以可以直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用,引用的格式:外部类名.this.。而外部类要访问内部类中的成员必须要建立内部类的对象。如:
class Outer{
private int x = 3;
class Inner{ //内部类
void function(){
System.out.println("innner :"+Outer.this.x);
}
}
void method(){
Inner in = new Inner();
in.function();
}
}
如果内部类定义在外部类的成员位置上,而且菲斯有,则可以在外部其他类中进行调用,格式为:
外部类名.内部类名 变量名 = 外部类对象.内部类对象;
Outer.Inner in = new Outer().new Inner();
同时,当内部类在成员的位置上时就可以被成员修饰符所修饰。例如:被private修饰,则是将内部类在外部类中进行封装。
static修饰的内部类就具备了static的特性,只能访问外部类中的静态成员,因而出现了访问局限。而外部其他类访问静态内部类中的static成员时用:new Outer.Inner().function();当访问static内部类的静态成员时用:Outer.Inner.function()。当内部类中定义了静态成员,该内部类必须是静态的,同样的,当内部了访问内部类时,内部类也必须是静态的。
内部类也可以定义在局部位置上,此时就不可以用成员修饰符修饰。因为还持有外部类的引用,所以可以直接访问外部类中的成员。也不可以访问所在局部中的局部变量,只有是被final修饰的了以后才可以被访问。
匿名内部类是内部类的简化写法。她的前提是:内部类必须继承或实现一个外部类或者接口。格式为:new 外部类名或者接口名(){覆盖类或者接口中的代码,(也可以自定义内容。)}
l 简单理解:就是建立一个建立一个带内容的外部类或者接口的子类匿名对象。同时为了不过于臃肿,匿名类中的定义的方法最好不要超过三个。