A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Honne 初级黑马   /  2019-8-14 15:33  /  878 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

------------------------内部类
如果一个事物的内部包含另一个事物,那么这就是一个类内部包含另一个类

分类
1.成员内部类
格式:
修饰符 class 外部类名称 {
修饰符 class 内部类名称 {

}
}

注意事项:内部类使用外部类,可以随意访问
外部类使用内部类,需要内部类对象


如何使用成员内部类
间接访问:在外部类的方法当中,使用内部类对象,然后main只是调用外部类的方法
直接访问:
公式:
外部类名称.内部类名称 对象名 = new 外部类名称().new 内部类名称();

内部类方法当中访问内部类的局部变量sout(num)
内部类方法当中访问内部类的成员变量sout(this.num)
内部类方法当中访问外部类的成员变量sout(外部类名.this.num)


2.局部内部类(包含匿名内部类)
如果一个类是定义在一个方法内部的,那么这就是一个局部内部类
“局部“ 只有当前所属的方法才能使用它,出了这个方法外面就不能使用了
定义格式:
修饰符 class 外部类名称 {
修饰符 返回值类型 外部类方法名称(参数列表) {
class 局部内部类名称 {
//
}
}
}
注意事项:
定义一个类的时候,权限修饰符的使用规则
1.外部类 public / (default)
2.成员内部类 public / protected / (default) / private
3.局部内部类 什么都不能写

局部内部类: 如果希望访问所在方法的局部变量,那么这个局部变量必须是【有效final的】
备注:只要局部变量事实不变,final关键字可以省略

匿名内部类
格式:
接口名称(或类名) 对象名 = new接口名称(或类名) () {
// 覆盖重写所有抽象方法
};

对格式进行解析
1.new代表创建对象的动作
2.接口名称就是匿名内部类需要实现哪个接口
3.{...}才是匿名内部类的内容

注意
1.匿名内部类,在【创建对象】的时候只能使用唯一一次
如果希望多次创建对象,只能使用实现类
2.匿名对象,在【调用方法】时,只能调用唯一的一次
如果希望多次调用,必须要给对象起一个名字
3.匿名内部类是省略了【实现类/子类名称】,但是匿名对象是省略了【对象名称】
强调:匿名内部类和匿名对象不是一回事!

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马