内部类
内部类
- 成员内部类
a) 就是定义在一个类的内部,而且与成员方法跟属性平级的内部类成为成员内部类,
i. 成员内部类不可以包含static关键字,即,不能声明静态属性,方法,代码块跟static静态区。
ii. 成员内部类访问外部属性跟方法需要用外部类名.this.成员方法/属性
package com.test; /** * Created by Administrator on 2017/6/26. */ public class Test { private String name = "外部类nme属性"; public static void main(String[] args) { Test.Inner inner = new Test().new Inner(); } class Inner{ public Inner(){ System.out.println(Test.this.name); } } }
iii. 在外部类中创建内部类的实例并且调用内部类的方法
package com.test; /** * Created by Administrator on 2017/6/26. */ public class Test { private String name = "外部类nme属性"; public static void main(String[] args) { Test.Inner inner = new Test().new Inner(); inner.test(); } class Inner{ public void test(){ System.out.println("外部类的测试方法"); } } }
当然内部类也可以存在构造方法,可以添加参数等操作。
iv. 成员内部类可以使用private,protected,public,static,final,abstract来修饰
v. 内部类在编译完成时会生成单独的class文件,文件为:
vi. 外部类无法直接访问内部类的属性跟方法,只能先在外部类中建立内部类的实例,通过内部类的实例来访问内部类的属性跟方法。
- 静态内部类
a) 一般类是不可以用static修饰的,但是内部类可以用static修饰类名
package com.test; /** * Created by Administrator on 2017/6/26. */ public class Test { private String name = "外部类nme属性"; public static void main(String[] args) { Test.Inner inner = new Test.Inner(); inner.test(); } static class Inner{ public void test(){ System.out.println("外部类的测试方法"); } } }
b) 静态内部类跟外部类没有任何关系,只是在定义稍有变化,静态内部类可以看做跟外部类平级的类,使用方式跟外部类完全相同。
c) 静态内部类不能访问到外部类肥静态的属性跟方法,外部类也不能访问到内部类非静态的内容。
package com.test; /** * Created by Administrator on 2017/6/26. */ public class Test { private String name = "外部类nme属性"; public static String getString(){ return "外部类String方法"; } static class Inner{ public static void main(String[] args) { System.out.println(Test.getString()); } } }
- 局部内部类
a) 定义在一个类的代码块中,方法体中的类成为局部内部类
package com.test; /** * Created by Administrator on 2017/6/26. */ public class Test { { class Wyw{ Wyw(){ System.out.println("----------"); } } } public void getString(){ class Wyw{}; } }
b) 局部内部类只能在方法体中或在代码块中使用
c) 局部内部类访问外部类的属性跟方法的办法
package com.test; /** * Created by Administrator on 2017/6/26. */ public class Test { private String name = "--------------"; public static void main(String[] args) { } public void getString(){ class Wyw{ public void print(){ System.out.println("内部了的print函数"); System.out.println(Test.this.name); } } } }
局部内部类基本上很少使用到,使用起来也很费劲,只做了解即可。
- 匿名内部类
a) 匿名内部类顾名思义就是没有名字的类
b) 因为没有名字,所以匿名内部类只能使用一次
c) 匿名内部类常常用来简化代码的编写
d) 匿名内部类常常用于多线程
有待项目开发中使用,理解