一、内部类(内置类、嵌套类)
1、内部类的访问规则:内部类可以直接访问外部类的成员,包括私有(private)。 之所以内部类可以直接访问外部类的成员,是应为内部类中持有了一个外部类的引用:外部类名.this 2、外部类要访问内部类就必须要建立内部类对象。 3、其他类要访问内部类中的方法有两种方式: 1)、当外部类能访问到内部类的时候,使用外部类的对象名进行访问。 2)、new一个内部类的对象:外部类名.内部类名 x = new 外部类名().new 内部类名() 4、内部类定义在外部类的成员位置上,就可以被成员修饰符所修饰:private、static、等。 1)、被private修饰: 此内部类就只能被其外部类建立对象 和 访问(在外部类中进行了封装)。 2)、被static修饰:就成为了静态内部类(下文详讲)。二、静态内部类(被static修饰)1、当内部类被static修饰后,就只能访问外部类中的静态成员了。
2、其他类如何访问静态类: 1)、当要访问静态类中的非静态成员时:new 外部类名.内部类名().内部方法名() new Outer.Inner().function() 2)、当要访问静态类中的静态成员时 :外部类名.内部类名.内部方法名() Outer.Inner.function() 注意:当内部类中定义了静态(static )成员,那么 该内部类就必须是静态(static)的。 当外部类中的静态(static)方法访问内部类时, 内部类也必须是静态(static )的。 三、使用条件当我们要描述的事物内部还有事物的时候,该事物用内部类来形容。 因为该内部事物在使用外部事物的内容。
四、当内部类定义在局部时1、因为不是在成员位置上,所以不能被成员修饰符所修饰(static、public等)
2、还是可以直接访问外部类的成员,因为他还是持有外部类中的引用 : 外部类名.this 但是他不能访问他所在局部的局部变量,但是可以被final修饰的局部变量。五、匿名内部类:1、匿名内部类其实就是内部类的简写格式。
2、定义匿名内部类的前提: 内部类必须是继承一个类,或者实现接口。 (内部类可以继承外部其它类或者实现外部的接口) (举例:人的类里有一个人的心脏的类,人的心脏类可以继承自一个动物的心脏的抽象类) 3、直接new一个以其父类或者接口名() 加大括号 复写其方法 的 子类对象, 后面直接加 . 来调用其方法 父类或者接口名(){复写的子类内容}.复写的方法 (直接在每个调用方法中做这个定义并调用,每次定义只能实现一次性调用) 总结:匿名内部类其实就是一个匿名的子类的对象。 4、匿名内部类中的方法不要超过3个,否则阅读性会比较差。 匿名内部类中最好只要复写父类方法,不要定义新的方法,此举一般无意义 因为:如果要给匿名内部类命名,就只能命一个父类的名字,因为多态的原因,其不能调用子类方法(无法定义子类名)。