Java内部类
来源:互联网 发布:软件挖矿 编辑:程序博客网 时间:2024/06/05 21:09
内部类,顾名思义,将一个类的定义放在另一个类的定义内部。内部类看起来像是一种代码隐藏机制,将类置于其他类的内部,但是,内部类远不止于此,它了解外围类,并能与之通信。
内部类分为:成员内部类,局部内部类,匿名内部类,静态内部类
当生成一个内部类的对象时,此对象与制造它的外围对象之间就有了一种联系,所以它能访问其外围对象的所有成员。原因是当某个外围类的对象创建了一个内部类对象时,此内部类对象必定会秘密地捕获一个指向那个外围类对象的引用。然后,在你访问此外围类的成员时,就是用那个引用来选择外围类的成员。并且,内部类对象只能在与其外围类的对象相关联的情况下才能被创建(除了static类),构建内部类对象时,需要一个指向其外围类对象的引用。
1.成员内部类
作为外部类的一个成员存在,与外部类的属性、方法并列
内部类和外部类的实例变量可以共存
在内部类中访问实例变量:this.属性
在内部类访问外部类的实例变量:外部类名.this.属性
对于一个名为outer的外部类和其内部定义的名为inner的内部类,编译完成后出现outer.class和outer$inner.class
成员内部类中不能有静态成员
代码如下:
2.匿名内部类
匿名内部类没有名字,没有构造方法,类中不能有静态成员,访问的外部的局部变量的类型只能是final型的,具体原因参看
http://feiyeguohai.iteye.com/blog/1500108,里面讲的非常清晰。
3.局部内部类
在代码块中定义的,典型的方式是在一个方法体里面创建。局部内部类不能有访问说明符,因为它不是外围类的一部分,其修饰符只能是final或者abstract;但是它可以访问当前代码块内的常量,(即final修饰的,否则会造成线程不安全问题,原因和匿名内部类的原因一样)以及此外围类的所有成员。
局部内部类和匿名内部类很相似,但有一个区别,局部内部类中有构造器。
4.静态内部类
如果不需要内部类对象与其外围类对象之间有联系,那么可以将内部类声明为static
这样的话就意味着:
1)要创建静态内部类的对象,并不需要其外围类的对象。
2)不能从静态内部类的对象中访问非静态的外围类对象。
public class Parcel{
private static class ParcelContents implements Contents
{
private int i = 11;
public int value()
{
return i;
}
}
protected static class PareclDestination implements Destination
{
private String label;
private PareclDestination(String whereTo)
{
label = whereTo;
}
public static void f()
{
}
static int x=10;
static class AnotherLevel
{
public static void f()
{
}
static int x =10;
}
}
public static Destination destination(String s)
{
return new PareclDestination(s);
}
public static Contents contents()
{
return new ParcelContents();
}
public static void main(String[] args)
{
Contents c = contents();
Destination d = destination("HelloWorld");
}
}
}
参考文献:《Java编程思想第四版》
- 【Java】【内部类】Java 内部类简介
- [Java] Java 内部类
- Java 内部类(成员内部类、局部内部类、静态内部类和匿名内部类)
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、局部内部类、静态内部类、匿名内部类)
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- java的内部类、匿名内部类、局部内部类
- java内部类之成员内部类、静态内部类
- java 成员内部类 局部内部类,匿名内部类
- Java 静态内部类/内部类
- java内部类、静态内部类 小结
- Java内部类,静态内部类
- JAVA 内部类与静态内部类
- java内部类--局部内部类
- Java 内部类以及匿名内部类
- JAVA Map、Set、List、Queue、Stack的特点与用法
- Spark连接Hadoop读取HDFS问题小结
- Sort the Array CodeForces
- RESTful服务最佳实践——(五)
- Android打印框架Demo
- Java内部类
- kjljljk
- 架构师成长之路——7个月成为一名架构师
- MVP框架实战Demo
- JAVA 快速排序
- BZOJ P4518征途
- JAVA 冒泡排序
- 学生管理系统
- 在O(1)时间复杂度删除链表节点-LintCode