您的位置:首页 > 其它

四大内部类简单小结

2016-05-03 08:57 218 查看
1. 实例内部类(类的内部,方法外部,没有static修饰)

实例内部类也叫成员内部类,是最普通的内部类:

1)实例内部类对象依托于外部类对象。

2)对象构建方式:先构建外部类对象,再构建内部类对象

3)可以访问外部类所有成员(静态,非静态), 即使是private的

例如:

classOuter

{

classInner

{

}

}

Outer.Innero1 = new Outer().new Inner();

注意:

1)虽然成员内部类可以无条件地访问外部类的成员,而外部类想访问成员内部类的成员却不是这么随心所欲了。在外部类中如果要访问成员内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问。

2)内部类可以拥有 private访问权限、protected访问权限、public访问权限及包访问权限 。如果成员内部类Inner用private修饰,则只能在外部类的内部访问,如果用public修饰,则任何地方都能访问;
如果用protected修饰,则只能在同一个包下或者继承外部类的情况下访问;如果是默认访问权限,则只能在同一个包下访问。

2. 静态内部类(类的内部,方法外部,有static修饰)

1)静态内部类不依赖于外部类对象。

2)对象构建方式:允许直接内部类对象

3)静态内部类只能访问外部类所有静态成员

例如:

classOuter

{

staticclass Inner

{

}

}

Outer.Innero1 = new Outer.Inner();

3. 局部内部类(定义在方法内部)

1)局部内部类的对象只能在定义此类的方法内部构建

2)局部内部类可以访问类中所有成员,但只能访问本方法内部使用final修饰的常量

例如:

public class OutterClass3 {

public String name;

public void run(final int a) {

final int x = 100;

class InnerClass {

public int i;

public void innerRun() {

System.out.println(name);
System.out.println(i);
System.out.println(x);
//x定义如前面没有final,则不能访问x,(a同样)。是由于局部变量生存期的原因,加上final延长生存期就可以了
}
}

}

}
注意:局部内部类不能使用static修饰

4. 匿名内部类

匿名内部类是我们编写代码时,最常用的一种内部类,在编写事件监听的代码时使用匿名内部类不但方便,而且使代码更加容易维护。

1)匿名内部类会有一个父类(可能是具体类,抽象类,接口)

2)匿名内部类没有名字,但有类体(代码块)

3)匿名内部类假如写到了方法内部,它就是特殊的局部内部类

classA{public void run(){}}

interfaceIM{void show();}

classOuter

{

privateA a = new A(){public void run(){}};

publicvoid display()

{

IMm = new IM(){void show(){};};

}

}

注意:

1)匿名内部类不能有访问修饰符和static修饰符的 。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: