序言:
在学习io时因为有需要开启一个线程,于是我写了一个MyThread,但是我发现需要调用其他类的属性与方法,于是我把需要调用的属性改为static,但是我又需要调用该类父类的非静态方法,由于这个父类是java的内置类我是无法修改的,那我就没有方法调用。于是我搜索资料,发现将MyThead定义为你需要调用属性和方法的类的内部类,就可以调用了,而我之前记得内部类似乎没有这样的特点。于是整理了内部有关的知识如下
内部类
概念:
一个类的内部有完整的嵌套了另一个类结果,被嵌套的类被称为内部类。
内部类的分类
思维导图如下:
静态内部类与非静态内部类的区别
1)非静态内部类不允许有static修饰的属性和方法。
2)静态内部类只能访问外部类的静态属性和方法。
内部类的实际使用
1) 实现多继承
我们之前的学习知道,java是不可以实现多继承的,一次只能继承一个类,我们学习接口的时候,有提到可以用接口来实现多继承的效果,即一个接口有多个实现,但是这里也是有一点弊端的,那就是,一旦实现一个接口就必须实现里面的所有方法,有时候就会出现一些累赘,但是使用内部类可以很好的解决这些问题。
因为外部类内够访问内部类,调用内部类的属性和方法,这样可以实现另类的多继承。
2) 用匿名内部类实现回调功能
我们用通俗讲解就是说在Java中,通常就是编写一个接口,然后你来实现这个接口,然后把这个接口的一个对象作以参数的形式传到另一个程序方法中, 然后通过接口调用你的方法,匿名内部类就可以很好的展现了这一种回调功能
即在传的参数为接口类型时,使用匿名内部类,而不是在外部定义一个实现类。
3)使用成员内部类开启线程
在使用线程时,我们有时需要调用外部类的数据,甚至是一些私有数据,由于内部类可以直接调用外部类的数据,这时使用内部类不失为一种好的选择