概念和分类
- 如果一个事物的内部包含另一个事物,那么这就是一个类内部包含另一个类。
成员内部类
基本格式
修饰符 class 外部类名称{
修饰符 class 外部类名称{
}}
内部类可以随意访问外部类,外部类访问内部则需要内部类对象
使用方式
间接方式:在外部类的方法当中使用内部类;然后再main中调用外部类的方法
直接方式:
外部类名称.内部类名称 对象名 = new 外部类名称().new 内部类名称()
1 | public class Myclass {//外部类 |
- 变量同名
1 | public class Outer { |
局部内部类(包括匿名内部类)
定义在方法内部,只有当前所属的方法才可以用
局部内部类,如果希望访问所在方法的局部变量,那么这个局部变量必须是有效final值
原因:new出来的对象在堆内存中,局部变量随着方法存在栈内存中。方法运行结束之后,立刻出栈,局部变量就会立刻消失。但是new出来的对象会在堆当中持续存在,直到垃圾回收消失。
1 | public class Outer { |
匿名内部类
如果接口的实现类(或者是父类的子类)只需要使用唯一的一次,那么这种情况下可以省略点该类的定义,而改为使用匿名内部类
定义格式
接口名称 对象名 = new 接口名称(){
//覆盖重写所有抽象方法
}
1 | public interface MyInterface { |
小节
定义一个类的时候权限修饰符
public > protected > (default) > private
外部类:public / (default)
内部类:public / protected / (default) / private
局部内部类:什么都不写