Java进阶之内部类

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();
        }
    }

 

 

你可能感兴趣的:(Java进阶之内部类)