四大内部类简单小结
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修饰符的 。
实例内部类也叫成员内部类,是最普通的内部类:
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修饰符的 。
相关文章推荐
- expression="execution(* com.controller.*.*(..))"
- Sping--IOC概念
- CSS魔法堂:重拾Border之——图片作边框
- TImage组件实现保存图片到Stream
- HDU 1719 Friend(思维题目)
- 6666转化为十六进制
- 喜讯:浙江利尔达物联网技术有限公司获评“产业余杭十佳信息经济企业”
- 12个鲜为人知的HTML 5设计小技巧
- 数论一·Miller-Rabin质数测试
- 【iCore3 双核心板_ uC/OS-III】例程五:软件定时器
- maven auto-config 多环境自动打包
- 北京的春天下过雨
- 图片分组加载
- 第60课:使用Java实战RDD与DataFrame动态转换操作
- bzoj 1657: [Usaco2006 Mar]Mooo 奶牛的歌声(单调栈)
- iOS开发多线程篇—GCD的基本使用
- (OK) simply running CORE & docker on Fedora 23
- SICP ex1-20 ex1-22
- 用Visio画UML顺序图
- 最长回文字串