------- android培训、java培训、期待与您交流! ----------
内部类
将一个内部类定义在一个类的里面,对里面的那个类就称为内部类。
当描述事物时,事物的内部还有事物,该事物用内部类来描述。
内部类的访问规则:
1、内部类可以直接访问外部类中的成员,包括私有。
2、外部类要访问内部类,必须建立内部类对象。
内部类定义在成员位置:
访问格式:
1、当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类中,可以直接建立内部类对象。
格式:外部类名.内部类名 变量名=外部类对象.内部类对象;
Outer.Inner in=new Outer( ).new Inner( );
class Outer { private static int x=3; static class Inner { public static void function() { System.out.println("inner:"+x); } } } public class InnerClass { public static void main(String[] args) { Outer.Inner i=new Outer().new Inner(); } }
2、当外部类在成员位置上,就可以被成员修饰符所修饰。
比如:private:将内部类在外部类中进行封装。
static:内部类就具有static的特性。
3、当内部类被static修饰后,只能直接访问外部类中的static成员,出现了访问局限。
4、在外部其他类中,如何直接访问static内部类中的非静态成员:new Outer.Inner( ).function( );
5、在外部其他类中,如何直接访问static内部类中的静态成员:Outer.Inner.function( );
public class ClassIn { public static void main(String[] args) { new Outer.Inner().function(); Outer.method(); } } class Outer { private static int x=3; static class Inner { public static void function() { System.out.println("inner:"+x); } } static class Inner2 { void show() { System.out.println("inner2 show"); } } public static void method() { Inner in=new Inner(); in.function(); new Inner2().show(); } }
注意:当内部类中定义i类静态成员,该成员必须是static。
当外部类中定义的static方法访问内部类时,内部类也必须是static的。
内部类只有定义在成员位置上才能被private和static修饰。
内部类定义在局部位置注意事项:
1、不可以被成员修饰符修饰。局部内部类不能定义static成员,因为static是成员修饰符。
2、可以直接访问外部类中的成员,因为还持有外部类中的引用。但是不可以访问它所在的局部中的变量。只能访问被final修饰的局部变量。
class Outer
{
int x=3;
void method(final int a)
{
final int y=4;
class Inner
{
void show()
{
System.out.println(a);
System.out.println("inner:"+y);
}
}
new Inner().show();
}
}
匿名内部类
1、匿名内部类其实就是内部类的简写格式,就是一个匿名子类。
2、定义匿名内类的前提:
内部类必须继承一个类或者实现接口。
3、匿名内部类的格式:
new 父类或者接口( ){定义子类内容}
4、匿名内部类中定义的方法最好不超过3个。
5、匿名对象对方法只能调用一次。
public void show()
{
new AbsDemo()
{
void show()
{
System.out.println("inner:"+x);
}
}.show();
}
如果需要多次调用可以运用多态的方法。
void function() { AbsDemo d=new AbsDemo() { void show() { System.out.println("inner:"+x); } }; d.show(); }