封装与继承

封装与继承

什么是封装

将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问

封装的原则

将不需要对外提供的内容都隐藏起来。 把属性隐藏,提供公共方法对其访问。

实现封装

  1. 修改属性的可见性
  2. 创建getter setter方法
  3. 在getter setter方法中创建属性控制语句

封装好处

便于使用者正确使用系统,防止错误修改属性 有助于系统之间的松耦合,提高系统独立性 提高软件的可重用性 降低了构建大型系统的风险

包的作用

  • 允许类组成较小的单元(类似 文件夹),易于找到和使用相 应的文件
  • 防止命名冲突 区分名字相同的类
  • 有助于实施访问权限控制

包的命名规范

包名由小写字母组成,不能以圆点开头或结尾

包名之前最好加上唯一的前缀,通常使用组织倒置的网络域名

包名后续部分依不同机构内部的规范不同而不同

访问修饰符

作用域**修饰符**

同一个类中

同一个包中

子类中

任何地方

private

可以

不可以

不可以

不可以

默认修饰符

可以

可以

不可以

不可以

protected

可以

可以

可以

不可以

public

可以

可以

可以

可以

static关键字

成员变量

静态变量,可以直接通过类名访问

成员方法

静态方法,可以直接通过类名访问

代码块

静态代码块,当Java虚拟机加载类时,就会执行该代码块

JVM加载类时,加载静态代码块 如果有多个静态块,按顺序加载 每个静态代码块只会被执行一次

类的成员变量分类

类变量(静态变量)

被static修饰的变量 在内存中只有一个拷贝 类内部,可在任何方法内直接访问静态变量 其他类中,可以直接通过类名访问

实例变量

没有被static修饰的变量 每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响

static方法

静态方法:可直接通过类名访问

静态方法中不能使用this和super 不能直接访问所属类的实例变量和实例方法 可直接访问类的静态变量和静态方法

实例方法:通过实例访问

可直接访问所属类的静态变量、静态方法、实例变量和实例方法

静态方法必须被实现
在实例方法里不可以定义static变量

如何使用继承

  1. 编写父类
  2. 编写子类,继承父类

子类访问父类成员

super关键字
  1. 使用super关键字,super代表父类对象
  2. 在子类构造方法中调用且必须是第一句
  3. 不可以访问父类中定义为private的属性和方法

继承条件下构造方法的调用规则

子类构造方法没有通过super显式调用父类的有参构造方法,也没通过this显式调用自身其他构造方法

系统默认调用父类的无参构造方法

子类构造方法通过super显式调用父类的有参构造方法

执行父类相应构造方法,而不执行父类无参构造方法

子类构造方法通过this显式调用自身的其他构造方法,在相应构造方法中应用以上两条规则