Java基础--内部类

Java内部类学习笔记

概述:

java类是单继承,java内部类就是为了实现继承多个具体的或者抽象类的能力--多继承。

或者某个类的实现不想或者也不需要设置为public的,例如直接实例化匿名内部类A new parentClass(){......},这个内部类里的实现只是被当前外部类使用,其他外部类有他们自己个性化的内部类B实现 new parentClass(){......},虽然这两个匿名内部类都是继承parentClass,但是内部类A和内部类B都只是在各自的外部类中使用,不会被其他类使用,所以不需要单独的创建这个类,这时仅作为内部类来实现。

位置分类:

1.成员内部类 2.局部内部类 3.作用域内部类(任意作用域 if for)4.接口内部类

|

|

每个位置可以包含:普通内部类,匿名内部类,静态(嵌套)内部类

详情点:

1. 成员内部类

    -- 它就是类的一个成员属性,由访问权限控制,default,private,protected,public

    -- 三种获取成员内部类方式:

        a. public InnerClass getInnerClass(){} 定义在外部类,在另一个类中调用该方法获取

        b. OutClass outter = new OutClass(); OutClass.InnerClass inner = outter.new InnerClass(); 这种方式如果内部类的权限控制为private在外部类中,则无法使用,编译会失败。

        c. 在外部类定义另一个成员属性,类型为成员内部类并且实例化new一个对象,则可以在另一个类中根据相应权限使用

2.局部内部类

    -- 内部类定义在方法内,只可以在方法体内new一个内部类实例,赋值给一个局部变量或者直接return

3.作用域内部类

   --定义在if或者其他作用域内,也只可在该作用域内new实例

4.接口内部类

  --接口内的内部类自动转坏为public static,通常可以内部类实现外部接口的某些方法,这些方法实现作用通用的实现给其他实现类

=======

5.普通内部类

  --无static修饰,不可以包含static成员属性,也不可以包含其他static内部类(嵌套内部类)

  --隐式地包含一个指针指向外部类对象,依赖于外部类对象,如果没有外部类对象无法创建内部类对象

6.匿名内部类

  -- new ClassA{ private String str1; public void method(){}} 是指创建了一个继承于ClassA的匿名类对象,ClassA可以是具体的某个类也可以是抽象类

  -- new InterfaceA{public void method(){}} 是指创建了一个实现接口InterfaceA并且实现了方法method

 -- 可以用于成员属性或者局部方法属性去使用

7. 静态内部类(嵌套)

 -- 由static修饰,可以在嵌套静态内部类,可以由static成员

 -- 无隐式指针指向外部类,不依赖外部类对象

参考自《Thinking In Java》

猜你喜欢

转载自lyf-email.iteye.com/blog/2392699