内部类什么时候使用?

学习了内部类,但是不知道在什么时候去用它,不知道用在什么地方最合适,请各方人士给些建议谢谢啦

参考lambda表达式用法,就是用的匿名内部类

作为类的拓展,比如人的基本信息,有家庭住址,你可以用一个string代替,也可以设计一个内部类,包括省 市 区等等。

1.容器类中经常使用内部类作为包装,比如链表LinkedList,就有一个Node内部类
2.事件驱动代码和线程代码中使用,这两种情况往往需要大量定义相同但函数功能实现不同的平行的类,可以通过匿名内部类来简化代码编写
3.间接多重继承。java一次只能继承一个类,比如你想让类C继承类A和类B,你可以在C中写两个内部类,让它们分别继承A和B,然后C通过内部类间接调用A和B的对象和方法。这个应该不常用,因为多重继承也可以通过接口实现,而且在较高版本的java中接口也可以定义变量和私有方法,和类的差别已经不大了

这个得看需求,并不是说一定要用,或者说一定不要用。当你写的一个类,只和某个特定的类打交道的时候,你就可以试着把他写成内部类(当然也可以不这样,这完全取决于你自己)。

一般只在一处使用且没用现成的实现类的话就可以用内部类或者 需要实现某些接口 的时候 而且 这个类只在局部使用 或只是用一次的时候用

  1. 只和某个特定的类相关,其他地方用不到
  2. 功能十分简单,但是可能不同场景代码
    举个例子,我想获取一个文件目录下的所有java文件,其他文件不要,代码如下
        File file = new File("d:\\test");
        
        File[] javaFiles = file.listFiles(new FileFilter() {
            
            @Override
            public boolean accept(File pathname) {
                String fileName = pathname.getName();
                if(fileName.endsWith("java")){
                    //文件名以“java”结尾的文件,返回true,可以获取到
                    //起到过滤作用
                    return true;
                }
                //返回false,不在最后的数组结果中
                return false;
            }
        });

这种文件过滤功能,其他地方用不到;但是在不同需求中逻辑也不一样,比如,有时候只取取“xml”文件,有时候只取“txt”文件;
这种类似的需求,适合用匿名内部类;单独写一个实现类,有点多余。。。

只在当前类中使用,不在其他地方使用。这时就可以用内部类。

内部类会生成一个类 加上外部类 则有两个class文件
访问特点:
1:内部类可以直接访问外部类中的成员
2:外部类要访问内部类,必须建立内部类的对象
使用情况:
一般用于类设计。
分析事物时,发现该事物描述中还有事物,而且这个事物还在访问被描述事物的内容。
这时就是还有的事物定义成内部类来描述。
例如:人 心脏的关系 心脏可以访问其他的器官

package Polymorphic;

public class day_4_7 {

public static void main(String[] args) {
Fu fu = new Fu();
fu.callInner();

}

}
class Fu{
private int i =3;
//便于直接访问类中的私有化属性及方法
class inner{
void test(){
System.out.println("测试数:"+3);
}
}
//调用内部类
public void callInner(){
inner s = new inner();
s.test();
}

}