【内部类】 内部类就是将一个类定义到另一个类中,类中再嵌套一个类,所以可以划分为内部类以及外部类。 上面这种叫做成员内部类,有什么局限呢? 成员内部类可以直接访问外部类的成员变量以及成员方法。 都是外部类就不可以直接访问内部类的成员变量和成员方法。 一句话总结:外面看不到里面,里面看得到外面。 外面如果想要看到里面,需要请里面的人(是实例的,具体的对象)出来讲解内部的世界和情况。 外部类名.内部类名 对象名 = new 外部类名().new 内部类名(); 【匿名内部类】 明白了内部类,下面来看看匿名内部类。 先来说说不使用匿名内部类的时候出现的问题: 我们在使用接口的时候需要分为如下4步: 1、定义子类 2、重写接口中的方法 3、创建子类对象 4、调用重写后的方法 再来看看匿名内部类的使用(前提条件:必须继承一个父类或者实现一个父接口) new 父类名或者接口名(){ @Override public void method() {} }; 匿名内部类可以作为参数进行传递。 例如:有一个接口A 匿名内部类: A a = new A(){ xxx方法 } xx(a); 也可以这样写: xx( new 父类名或者接口名(){ @Override public void method() {} }; ) 【内部类的使用场景】 1、内部类作用于外部类,只为外部类干活,不受其他类进行使用,是为幕后劳动者,这种情况就使用。 2、当我们的代码中有很多的非面向对象的业务代码的时候,例如判断循环语句这些很多的时候,重复不变的代码,可以专门抽取出来,然后通过内部类方式去调用。 3、多算法场合,例如我们的一个方法用来对数组排序并且依次打印各元素,对数组排序方法有很多种,用哪种方法排序交给用户自己确定。对于这样一个需求,我们很容易解决。我们决定给哪些排序算法定义一个接口,具体的算法实现由用户自己完成,只要求他实现我们的接口就行。 4、有时候我们为了让代码更加灵活以及容易扩展,就可以使用到内部类,例如:模板方法模式。
深入理解Java匿名内部类
最新推荐文章于 2024-08-09 13:50:59 发布