1、访问修饰符
| 本类 | 同包类 | 不同包类 | |||
| 子类 | 非子类 | 子类 | 非子类 | ||
| public | √ | √ | √ | √ | √ |
| protected | √ | √ | √ | √ | |
| 默认 | √ | √ | √ | ||
| private | √ | ||||
2、封装
外部操作私有属性,用set/get方法
封装的好处:类的成员变量可以成为只读或者只写的。
类可以对存储在其成员变量中的内容有一个整体的控制。
类的用户不需要知道类是如何存储数据的。
3、静态类成员、初始化块
4、内部类(把一个类定义在另一个类的内部)
特点:独立的class文件,同样需要编译,同样可以产生对象
分类:①成员内部类:位置:位于外部类的全局位
访问修饰符:决定能否在第三方类中使用该内部类
class文件名:外部类名字$内部类名字。
产生对象:可以在外部类的任意方法中,也可以在第三方类的方法中(考虑访问修饰符)
在内部类里面:属性:不能定义static的属性(常量可以是static)
方法:不能定义static的方法
可以访问外部类的任意属性和方法
使用this代表的是内部类对象
如果内部类属性与外部类属性同名:使用外部类类名.this.属性名调用外部类的属性
如果内部类方法与外部类方法同名:使用外部类类名.this.方法名调用外部类的方法
在外部类里面:可以直接产生内部类对象,然后无视访问修饰符视情况调用其属性和方法
在第三方类中:产生内部类对象,必须先产生外部类对象
使用特殊外部类对象.new的语法产生内部类对象
根据访问修饰符视情况调用属性和方法
②成员内部类特例:静态内部类
位置:位于外部类的全局位置,但是添加static修饰符
访问修饰符:决定能否在第三方类中使用该内部类
class文件名:外部类名字$内部类名字
产生对象:可以在外部类的任意方法中,也可以在第三方类的方法中(考虑访问修饰符)
在内部类里面:属性:可以定义静态和非静态的
方法:可以定义静态和非静态的
非静态方法:只能访问外部类的静态属性和静态方法
this代表内部类对象
如果属性方法出现同名的情况,用外部类类名.的方式特制外部类中的属性方法
静态方法:只能访问外部类的静态属性和静态方法
在外部类里面:直接new出内部类对象
用对象名.的方式访问内部类的非static属性和方法,无视访问修饰符
用内部类类名.的方式访问内部类的static属性和方法,无视访问修饰符
在第三方类中:无需产生外部类对象,使用外部类类名.内部类类名的方式产生内部类对象
根据访问修饰符,调用属性和方法
③局部内部类:
位置:在外部类的某个方法内部
访问修饰符:没有
class文件名字:外部类类名&数字编号+内部类类名
产生对象:只能在内部类所在的方法中
在内部类中:只能定义非static的属性和方法(常量可以是static)
如果outMethod是静态的,则不能访问外部类的非静态属性和方法;其他情况都可以访问
this代表当前内部类对象
如果内部类属性与外部类属性同名:使用外部类类名.this.属性名调用外部类的属性
如果内部类方法与外部类方法同名:使用外部类类名.this.方法名调用外部类的方法
无法访问内部类所在方法的变量,只能访问常量
在外部类中:直接new出来即可
无视访问修饰符视情况调用其属性和方法
④局部内部类特例:匿名内部类
位置:在外部类的某个方法内部,new对象的同时定义属性行为,所以只能用这一次
访问修饰符:不存在
class文件名:外部类的类名&数字编号
在内部类中:只能定义非static的属性和方法(常量可以是static)
如果outMethod是静态的,则不能访问外部类的非静态属性和方法;其他情况都可以访问
this代表当前的匿名内部类对象
如果内部类属性与外部类属性同名:使用外部类类名.this.属性名调用外部类的属性
如果内部类方法与外部类方法同名:使用外部类类名.this.方法名调用外部类的方法
无法访问内部类所在方法--即outMethod()中的的局部变量,只能访问常量
本文详细解析了Java中的访问修饰符及其适用范围,并深入探讨了内部类的概念、分类及其实现细节,包括成员内部类、静态内部类、局部内部类和匿名内部类的特点与使用场景。
2568

被折叠的 条评论
为什么被折叠?



