一文让你学会 Java 中的内部类

内部类
概念
如果一个事物的内部包含另一个事物,那么这就是一个类内部包含另一个类。例如:身体和心脏的关系。又如:汽车和发动机的关系。
分类
1.成员内部类 2.局部内部类(包含匿名内部类)
成员内部类的定义
复制代码
注意:内用外,随意访问;外用内,需要内部类对象。
举例配合理解:

成员内部类的使用
如何使用成员内部类?有两种方式:1.间接方式:在外部类的方法当中,使用内部类;然后 main 只是调用外部类的方法。2.直接方式,公式:类名称 对象名 = new 类名称();【外部类名称.内部类名称 对象名 = new 外部类名称().new 内部类名称();】
举例配合理解:


内部类的同名变量访问


局部内部类的定义与使用

举例配合理解:


局部内部类的 final 问题

匿名内部类
如果接口的实现类(或者是父类的子类)只需要使用唯一的一次, 那么这种情况下就可以省略掉该类的定义,而改为使用【匿名内部类】。说白了就是想用一个接口,就必须有个实现类,在覆盖重写里面的抽象方法,而如果匿名内部类,那么就不需要实现类,直接在主方法里面 new 接口,补上大括号,重写抽象方法即可。
匿名内部类的定义格式:
接口名称 对象名 = new 接口名称(){ //覆盖重写所有抽象方法};
小细节:注意大括号后面要有分号,不要忘记。
举例配合理解:

匿名内部类注意事项

学习匿名内部类主要是让大家以后在阅读别人代码的时候,能够理解。并不代表以后都要这样写。因为匿名内部类有两个缺点:缺点 1:太复杂,太乱,可读性差。缺点 2:类没有名字,以后想重复使用,不能用。
类作为成员变量类型
代码举例:
复制代码
复制代码
复制代码
接口作为成员变量类型


接口作为方法的参数或返回值

版权声明: 本文为 InfoQ 作者【几分醉意.】的原创文章。
原文链接:【http://xie.infoq.cn/article/a904f0a3a5bd86960e2284ee0】。文章转载请联系作者。
评论