Java中的内部类,顾名思义,就是在一个类的内部再创建一个类。
内部类的好处:
1、内部类的对象能够访问创建它的对象的所有方法和属性,包括私有数据。
2、对于同一个包中的其他类来说,内部类是隐形的。
3、匿名内部类可以方便地定义回调。
4、使用内部类可以方便地编写事件驱动的程序。
作为一个单独的类,的确只能有"public"和"default"两种访问控制符,但是作为内部类,就可以使用"private"控制符,当内部类设置为private,包含次内部类的外部类的方法才可以访问它。
局部内部类:
局部变量就是在某个类的方法中定义的变量,它的作用范围就在这个方法体内。同样局部内部类就是在类的方法中定义的一个内部类,它的作用范围也在这个方法体内。
局部内部类就是定义在外部类的方法中,与局部变量类似,在局部内部类前不加修饰符public和private,其范围为定义它的代码块。局部内部类不仅可以访问外部类实例变量,还可以访问外部类的局部常量,但要求外部类的局部变量是final的。其实,以上做法,相当于是为内部类添加了一个属性,这个属性就是外部类的final局部变量。在类外不可直接访问局部内部类,以保证局部内部类对外是不可见的,只有在方法中才能调用其局部内部类。
静态内部类
当一个内部类不需要引用它的外部类的方法、属性值时,可以讲这个类设置为static,这就是静态内部类。既然是静态的,包含它的类要引用它时,就可以不必创建对象,直接引用。在静态内部类中只能访问外部类的静态成员。构造内部类对象,不再需要构造外部类对象。
匿名内部类
在编写程序代码时,不一定要给内部类取一个名字,可以直接以对象名来代替。 匿名类如何在程序中使用?
匿名类是一种特殊的局部内部类,用来继承一个类或者实现一个接口。匿名内部类不能定义构造方法。在编译的时候由系统自动起名Out$1.class。如果一个对象编译时的类型是接口,那么其运行的类型是实现这个接口的类,因为匿名内部类无构造方法,所以其使用范围非常有限。
接口与继承有什么区别?
接口在本质上就是一个特殊的类。在语法上跟继承有着很大的区别。
属性:接口中所有属性都是公开静态常量,继承则无所谓。
方法:接口中的所有方法都是公开抽象方法,继承中所有的方法不一定都是抽象方法。
接口方法:接口没有构造器,继承有构造器。