Java进阶之内部类
Java进阶之内部类
在Java中,可以将一个类定义在另一个类或者一个方法里面,这样的类,叫做内部类
成员内部类
- 它定义在另一个类的内部
- 当成员内部类和外部类拥有同名的成员变量或方法,会产生隐藏现象,在内部类中,默认是访问成员内部类中的成员,如果需要访问外部类的同名变量或方法,需要使用(外部类.this.[成员变量/成员方法])
- 在内部类中可以无条件访问外部类,但是,外部类访问内部类的成员,需要创建内部类的对象,在通过对象来引用访问
- 内部类拥有private、protected、public访问权限,以及包访问权限
局部内部类
- 局部内部类是定义在一个方法或者一个作用域里面的内,他和成员内部类的区别在于,局部内部类的访问权限仅限于方法内,或者该设定的作用域内
- 局部内部类就像局部变量一样,不能有修饰符
匿名内部类
- 匿名内部类是唯一一种没有构造器的类,因为没有构造器,所以匿名内部类的范围相当有限
- 一般来说,匿名内部类用于继承其他类或实现接口,不需要增加格外的方法
静态内部类
- 静态内部类不需要外部类
- 静态内部类在加载时,全局只加载一次
- 比如驱动的加载
{ try{ Class.forName("com.mysql.jdbc.Driver"); }catch(ClassNotFoundException e){ e.printStackTrace(); } }
使用内部类的好处
- 每个内部类都能独立的继承一个接口的实现
- 方便将有一定逻辑关系的类放置在一起,同时,又对外部隐藏
- 编写事件驱动程序,比如上边加载mysql驱动
- 编写线程代码
public class A { public String nameOut; public String testOut(){ InnerClass ic = new InnerClass(); ic.testInner(); return "s"; } private class InnerClass{ public String name; public void testInner(){ } } public static void main(String[] args) { InnerClass ic = new A().new InnerClass();//InnerClass ic.testInner(); } }