JavaSE/14.内部类、包装类和权限修饰符总结
洞房记得初相遇。便只合、长相聚。何期小会幽欢,变作离情别绪。
——柳永《昼夜乐》
## 1. 内部类1.1 成员内部类
1 | public class Demo01 { |
1.2 局部内部类
方法中的属性全部都不能用修饰符修饰,所以局部内部类不能使用修饰符来修饰。
jdk8版本以后,局部内部类中调用的属性,如果没写final修饰,默认会自动添加final
1
2
3
4
5
6
7
8
9
10
11
12 class Outer{
public void method(){
final int num =520;
class Inner{
public void methodInner(){
System.out.println("num = " + num);
}
}
Inner inner = new Inner();
inner.methodInner();
}
}
1.3 匿名内部类【重点】
- 匿名内部类 :是内部类的简化写法。它的本质是一个
带具体实现的
父类或者父接口的`` 匿名的
子类对象。开发中,最常用到的内部类就是匿名内部类了。- 反射用的到,
jdk8
lambda表达式也用得到。(箭头表达式)前提
- 匿名内部类必须继承一个父类或者实现一个父接口。
以接口举例,当你使用一个接口时,似乎得做如下几步操作:
- 定义子类
- 重写接口中的方法
- 创建子类对象
- 调用重写后的方法
我们的目的,最终只是为了调用方法,那么能不能简化一下,把以上四步合成一步呢?匿名内部类就是做这样的快
捷方式。
格式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 public class Demo {
public static void main(String[] args) {
USB usb = new USB() {
public void open() {
System.out.println("插入");
}
public void close() {
System.out.println("拔出");
}
};
//匿名内部类
usb.open();
usb.close();
}
}
interface USB{
void open();
void close();
}
2. 包装类
基本类型与对应的包装类对象之间,来回转换的过程称为”装箱“与”拆箱“:
装箱:从基本类型转换为对应的包装类对象。
拆箱:从包装类对象转换为对应的基本类型。
由于我们经常要做基本类型与包装类之间的转换,从Java 5(JDK 1.5)开始,基本类型与包装类的装箱、拆箱动作可以自动完成。
Integer i = 4;
自动装箱。相当于Integer i = Integer.valueOf(4);
i = i + 5;
等号右边:将i
对象转成基本数值(自动拆箱)i.intValue() + 5
;加法运算完成后,再次装箱,把基本数值转成对象。
2.1 基本类型与字符串之间的转换
1 | 除了Character类之外,其他所有包装类都具有parseXxx静态方法可以将字符串参数转换为对应的基本类型: |
2.2 引用数据类型
基本类型可以作为成员变量、作为方法的参数、作为方法的返回值,那么当然引用类型也是可以的。
class作为成员变量
interface可以作为对象的成员变量。
(多态的形式接收对象),interface也可以作为方法的返回值类型存在。
3. 权限修饰符
private 修饰的方法,只能在本类中调用
public 修饰的方法,在任何地方都可以调用
protected修饰的方法在不同包里面,只有子类对象可以调用。
public | protected | default | private | |
---|---|---|---|---|
同一个类 | √ | √ | √ | √ |
同一个包 | √ | √ | √ | × |
不同的包子类 | √ | √ | × | × |
不同包非子类 | √ | × | × | × |