final关键字
final的用法
修饰类 :不能被继承;
修饰方法:不能被覆盖重写:
修饰成员变量:同局部,并且必须手动赋值
修饰局部变量:基本数据类型值不能改变,引用数据类型地址值不能改变;
权限修饰符
区别
A. public 可以跨包访问
B. protected 只能在同一个包当中访问,特殊情况下可以跨包访问,特殊情况是 父子关系(继承和实现)
C. [default] 只能在同一个包当中访问
D. private 只能在本类当中访问(私有的成员变量儿子无法访问,私有的成员方法儿子无法继承覆盖重写)
使用
A. 成员变量,推荐采用 private 私有化修饰,解决数据安全问题。提供对应的 getter 和 setter
B. 成员方法,推荐采用 public 目的是为了让其他类跨包的情况下,可以进行访问调用
C. 构造方法,推荐采用 public 目的是为了让其他类跨包的情况下,可以进行访问调用 创建对象
注意: 构造方法有一种情况下需要写成 private 的. 作为工具类使用的情况下写成私有的。
想一想 java.util.Arrays 工具类 java.lang.Math 工具类.目的是为了不让你创建对象,采用类名称直接打点调用静态
内部类
成员内部类 创建对象的格式
外部类名称.内部类名称 对象名称 = new 外部类名称().new 内部类名称();
A. 外部类成员变量 Outer.this.name
B. 内部类成员变量 this.name
C. 内部类局部变量 name
局部内部类
把类写在 局部变量(方法当中的变量)所在的位置,叫做局部内部类
局部内部类访问外面的局部变量,为什么要加上 final 关键字? "生命周期得到延长"
主要是为了延长 局部变量的生命周期。分析:
a. 局部内部类的对象存在于 堆内存当中,生命周期长
b. 局部变量存在于 栈内存当中,生命周期短
c. 如果没有 final 访问的时候, 可能生命周期短的就已经消失掉了,无法访问。
d. 如果加上 final 访问的时候, 就可以随时访问。生命周期延长了。
匿名内部类
1. 匿名内部类的写法格式:
new 接口名称/抽象类名称(){ .... }
2. 格式解释:
上面的大括号当中就是匿名内部类。只不过我们可以采用多态转型(向上转型)变成父亲的对象。
3. 匿名对象和匿名内部类
只要是匿名的东西,都是省略一些内容,都是只能使用1次。
匿名对象是省略了对象名称,例如: new Student(); 只能调用1次
匿名内部类省略了类名称,例如: new IAnimal(){ ...};
4. 匿名内部类的本质:
匿名内部类实际上是 '接口的实现类' --> 子类
根据多态的想法,站在父亲的角度看待问题,可以把 匿名内部类 当做爹 接口使用 --> 接口
结论: 如果看到方法的参数是接口,毫不犹豫,调用方法的时候,就可以传入匿名内部类。