封装与继承
什么是封装
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
封装的原则
将不需要对外提供的内容都隐藏起来。 把属性隐藏,提供公共方法对其访问。
实现封装
- 修改属性的可见性
- 创建getter setter方法
- 在getter setter方法中创建属性控制语句
封装好处
便于使用者正确使用系统,防止错误修改属性 有助于系统之间的松耦合,提高系统独立性 提高软件的可重用性 降低了构建大型系统的风险
包的作用
- 允许类组成较小的单元(类似 文件夹),易于找到和使用相 应的文件
- 防止命名冲突 区分名字相同的类
- 有助于实施访问权限控制
包的命名规范
包名由小写字母组成,不能以圆点开头或结尾
包名之前最好加上唯一的前缀,通常使用组织倒置的网络域名
包名后续部分依不同机构内部的规范不同而不同
访问修饰符
作用域**修饰符** | 同一个类中 | 同一个包中 | 子类中 | 任何地方 |
---|---|---|---|---|
private | 可以 | 不可以 | 不可以 | 不可以 |
默认修饰符 | 可以 | 可以 | 不可以 | 不可以 |
protected | 可以 | 可以 | 可以 | 不可以 |
public | 可以 | 可以 | 可以 | 可以 |
static关键字
成员变量
静态变量,可以直接通过类名访问
成员方法
静态方法,可以直接通过类名访问
代码块
静态代码块,当Java虚拟机加载类时,就会执行该代码块
JVM加载类时,加载静态代码块 如果有多个静态块,按顺序加载 每个静态代码块只会被执行一次
类的成员变量分类
类变量(静态变量)
被static修饰的变量 在内存中只有一个拷贝 类内部,可在任何方法内直接访问静态变量 其他类中,可以直接通过类名访问
实例变量
没有被static修饰的变量 每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响
static方法
静态方法:可直接通过类名访问
静态方法中不能使用this和super 不能直接访问所属类的实例变量和实例方法 可直接访问类的静态变量和静态方法
实例方法:通过实例访问
可直接访问所属类的静态变量、静态方法、实例变量和实例方法
静态方法必须被实现
在实例方法里不可以定义static变量
如何使用继承
- 编写父类
- 编写子类,继承父类
子类访问父类成员
super关键字
- 使用super关键字,super代表父类对象
- 在子类构造方法中调用且必须是第一句
- 不可以访问父类中定义为private的属性和方法
继承条件下构造方法的调用规则
子类构造方法没有通过super显式调用父类的有参构造方法,也没通过this显式调用自身其他构造方法
系统默认调用父类的无参构造方法
子类构造方法通过super显式调用父类的有参构造方法
执行父类相应构造方法,而不执行父类无参构造方法