内部类:内置类,嵌套类。
将类定义在另一个类中,该类就是内部类。类中定义的类中就是内部类。其实类的定义位置发生了一点小变化。
访问方式:
内部可以直接访问外部类中的成员。
外部类想要访问内部类,需要建立内部类对象。
什么时候定义内部类呢?
当分析一个事物时,该事物的内部还有具体的事物,这个具体的事物在使用该事物中的其他成员。这时就将这个具体的事物用内部类来描述。
内部类通常都不会直接对外提供,都会封装到外部类中,外部类一般会通过对外提供方法的形式对其进行访问。
非静态的内部类之所以可以直接访问外部类中的成员,
那是因为内部类中都持有一个外部类对象引用:外部类名.this
静态的内部类之所以可以直接访问外部类中的静态成员,其实持有的是外部类名。
记住只有内部类定义在成员位置上,才可以有这些成员修饰符。
匿名内部类
匿名内部类:就没有名字的内部类。
好处:简化了内部类的书写。
前提:内部类必须要继承或者实现一个外部类或外部接口
匿名内部类的格式:
new 父类名或者接口(){里面定义该父类或者接口的子类成员。}
匿名内部类其实就是一个子类匿名对象。这是一个带有内容的对象,这个对象有点胖。
什么时候使用匿名内部类呢?
当函数的参数是一个接口类型的引用,而且该接口中的方法不超过3个。
这时可以给这个函数传递一个匿名内部类实际参数进入。简化书写