【final、权限、内部类、引用类型】
!!主要学会使用,理解重要
一. 自增运算符
-
配合使用(适用于绝大部分情况)
- ++在前: 先自增, 后运算
- ++在后: 先运算, 后自增
正确的理解方式
- 无论++在哪都先自增
- ++在前, 参与运算的是++之后的值
- ++在后, 参与运算的是++之前的值
二. final关键字
- final: 最终
- final可以用来修饰: 类, 方法, 变量
- final修饰的类不能被继承
- final修饰的方法不能被重写
- final修饰的变量就变成了常量, 值不能更改
三. 权限修饰符
- public, protected, 默认(什么都不写), private
public | protected | 默认 | private | |
---|---|---|---|---|
同一个类中 | √ | √ | √ | √ |
同一个包中 | √ | √ | √ | × |
不同包(子父类) | √ | √ | × | × |
不同包(无关类) | √ | × | × | × |
- protected: 保护给子类去使用
方法的重写
- 子父类中, 出现了一模一样的方法(子类的权限可以大于等于父类)
四. 内部类
1. 内部类
一个.java文件中可以创建多个类, 但是只能有一个是public修饰的, 并且这个public修饰类的类名一定和文件名一致.
- 类中又创建了一个类
// 外部类
public class Person {
// 内部类
public class Heart {
}
}
- 使用特点
- 内部类使用外部类中的成员, 可以直接使用.
- 外部类使用内部类中的成员, 需要先创建对象.
- 其他类使用内部类中的成员, 需要先创建对象
外部类名.内部类名 对象名 = new 外部类名().new 内部类名();
2. 匿名内部类(重点, 难点)
-
前提: 存在一个类或者接口
-
格式:
new 类名() {} new 接口名() {}
-
本质:
- 代表了继承了该类的子类对象
- 代表了实现了该接口的实现类对象
总结
- 当方法的参数列表是类, 接口, 那么实际传入的是它们的子类对象 -> 匿名内部类(代表类|接口的子类对象)