内部类
2016-11-01 20:09
127 查看
内部类分为四种:
1.成员内部类
2.局部内部类
3.静态内部类
4.匿名内部类
成员内部类和静态内部类可以类比为非静态的成员变量和静态的成员变量。
成员内部类就像一个实例变量。
它可以访问它的外部类的所有成员变量和方法,不管是静态的还是非静态的都可以。
在外部类里面创建成员内部类的实例:
this.new Innerclass();
在外部类之外创建内部类的实例:
(new Outerclass()).new Innerclass();
在内部类里访问外部类的成员:
Outerclass.this.member
类定义时加上static关键字.
不能和外部类有相同的名字。
被编译成一个完全独立的.class文件,名称为OuterClass$InnerClass.class的形式。
只可以访问外部类的静态成员和静态方法,包括了私有的静态成员和方法。
生成静态内部类对象的方式为:
OuterClass.InnerClass inner = new OuterClass.InnerClass();
匿名内部类就是没有名字的局部内部类,不使用关键字class, extends, implements, 没有构造方法。
匿名内部类隐式地继承了一个父类或者实现了一个接口。
匿名内部类使用得比较多,通常是作为一个方法参数。
生成的.class文件中,匿名类会生成OuterClass$1.class文件,数字根据是第几个匿名类而类推。
1.成员内部类
2.局部内部类
3.静态内部类
4.匿名内部类
1.成员内部类
成员内部类也是定义在另一个类中,但是定义时不用static修饰。
成员内部类和静态内部类可以类比为非静态的成员变量和静态的成员变量。
成员内部类就像一个实例变量。
它可以访问它的外部类的所有成员变量和方法,不管是静态的还是非静态的都可以。
在外部类里面创建成员内部类的实例:
this.new Innerclass();
在外部类之外创建内部类的实例:
(new Outerclass()).new Innerclass();
在内部类里访问外部类的成员:
Outerclass.this.member
//成员内部类......相当于非静态方法 class MemberInner { private int a = 3; public class Inner2 { private int a = 2; public void doSomething() { // 调用外部类的属性 System.out.println(MemberInner.this.a);// 这块要注意......很重要!!! System.out.println(a); } } } public class Test3 { public static void main(String[] args) { MemberInner.Inner2 inner2 = new MemberInner().new Inner2();// 非静态内部类要new实例 inner2.doSomething(); } }
2.静态内部类
最简单的内部类形式。
类定义时加上static关键字.
不能和外部类有相同的名字。
被编译成一个完全独立的.class文件,名称为OuterClass$InnerClass.class的形式。
只可以访问外部类的静态成员和静态方法,包括了私有的静态成员和方法。
生成静态内部类对象的方式为:
OuterClass.InnerClass inner = new OuterClass.InnerClass();
//静态内部类......相当于静态方法 class StaticInner{ private static int a=3; public static class Inner{ public void test(){ System.out.println(a); } } } public class Test2 { public static void main(String[] args) { StaticInner.Inner inner=new StaticInner.Inner();//静态内部类直接调用 inner.test(); } }
3.局部内部类
//局部内部类......相当于局部变量 class LocalInner { public void doSomething(int b) { final int a = 3;// 只能访问final的变量 class Inner3 { public void test(int b) { System.out.println(b); System.out.println(a); } } new Inner3().test(b); } } public class Test4 { public static void main(String[] args) { LocalInner inner = new LocalInner(); inner.doSomething(4); } }
4.匿名内部类
匿名内部类Anonymous Inner Class
匿名内部类就是没有名字的局部内部类,不使用关键字class, extends, implements, 没有构造方法。
匿名内部类隐式地继承了一个父类或者实现了一个接口。
匿名内部类使用得比较多,通常是作为一个方法参数。
生成的.class文件中,匿名类会生成OuterClass$1.class文件,数字根据是第几个匿名类而类推。
public class Demo { public static void main(String[] args) { Thread t = new Thread() { public void run() { for (int i = 1; i <= 5; i++) { System.out.print(i + " "); } } }; t.start(); } }
相关文章推荐
- JAVA笔记九(35-38 内部类、匿名内部类以及java的线程)
- 内部类和外部类
- java 匿名内部类
- 第五章 -- 类的修饰符和内部类
- 通过反射获取一个内部类的属性
- Java中的内部类
- 黑马程序员--------内部类和外部类
- 内部类的种类与原理介绍
- java编程思想笔记--内部类部分二
- Java基础之四大内部类(结合代码理解)
- JAVA学习笔记----接口与内部类
- 内部类
- 内部类单例模式,
- Java为什么要使用内部类
- 内部类与控制框架
- Java中的内部类(三)
- 黑马程序员——Java基础---多态、内部类、异常、包
- JAVA内部类使用,什么时候该使用内部类及使用内部类的好处
- 关于JAVA匿名内部类的一点讨论.
- 031、内部类