内部类
使用内部类的好处
1.封装性
- 如果我们的内部类不想轻易被任何人访问,可以选择使用private修饰内部类
2.实现多继承:
- java类都是单继承,而在内部类中可以有多个内部类多个继承供外部类使用
3.解决出现同名方法的问题
内部类的概念
- 内部类可以直接访问外部类中的成员,包括私有成员(方法)
- 外部类要访问内部类的成员,必须要建立内部类的对象(new)
- 在成员位置的内部类是成员内部类
- 在局部位置的内部类是局部内部类
成员内部类
位置:类里方法外
调用:
class outer {
public class Inter {
}
}
引用:
普通创建内部类引用
//注意:内部类会用到外部类属性,所以外部调用内部类时须先初始化外部类
---------------------------------------------------
//其他类引用 ---需要先实例化外部类
outer.Inter inter = new outer().new Inter();
//内部类的外部类 ----直接创建即可
Inter inter = new Inter();
当内部类被static修饰
----------------------------------------------------
//其他类引用 ---因内部类对象也属于类成员的一部分,当被static调用时可直new接类名.内部类名()
outer.Inter inter = new outer.Inter();
//内部类的外部类 ----直接创建即可
Inter inter = new Inter();
----------------------------------------------------
//总结:静态资源访问时不需要创建对象,可以通过类名直接访问
// 访问静态类中的静态资源可以通过”. . . ”链式加载的方式访问
当内部类被private修饰
----------------------------------------------------
//其他类引用
无法在被其他类中直接获取资源,需要在外部类提供get方法获取(外部类可以new内部类)
//内部类的外部类 ----直接创建即可
Inter inter = new Inter();
----------------------------------------------------
// 总结: 成员内部类被Private修饰以后,无法被外界直接创建创建对象使用
// 所以可以创建外部类对象,通过外部类对象间接访问内部类的资源
局部内部类
位置:类里,方法内
定义并调用:
//外部类
class Outer4 {
//成员方法
public void show() {
//内部类
class Inner4 {
}
//只可以在局部类下(创建完成后)在创建对象
new Inner4();
}
}
调用
匿名内部类
一般和匿名对象在一起使用
匿名内部类属于局部内部类
而且是没有名字的局部内部类
- 通常只为了调用一次,才用匿名内部类
- 通常都是实现抽象方法、或者接口,且实现所有抽象类方法