一、封装
- 程序设计追求 “高内聚,低耦合” 。
- 高内聚:内部数据操作细节由程序员完成,不允许外部干涉。
- 低耦合:仅暴露少量的方法给外部使用。
- 封装:禁止直接访问一个对象中数据的实际表示,而通过操作接口来访问。
- 属性私有
- get / set
private int age //属性私有 public void getAge(){ return age; } //通过创建方法来进行对数据的访问 public void setAge(int age){ this.age=age; } //通过创建方法来进行对数据的修改
- 使用封装的优点
- 隐藏代码的实现细节,提高程序的安全性。
- 统一接口
- 增加系统的可维护性
二、继承
2.1 综述
- 继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以用父类的功能,也可以增加新的数据或新的功能,但不能选择性地继承父类。
- 使用继承—— extends
- 子类拥有父类非 private 的属性和方法。
- 子类可以拥有自己属性和方法,即子类可以对父类进行扩展。
- 子类可以用自己的方式实现父类的方法。
2.2 构造器
- 构造器只能够被调用,而不能被继承。即子类无法继承父类的构造方法。
- Java 的编译器会默认给子类调用父类的默认构造器。 如果父类没有默认构造器,我们就要必须显示的使用 super() 来调用父类构造器,而且这必须是在子类构造器中做的第一件事(第一行代码)。
2.3 缺陷
- 父类变,子类就必须变。
- 类只有单继承,没有多继承。
- 继承破坏了封装,对于父类而言,它的实现细节对与子类来说都是透明的。
- 继承是一种强耦合关系。
那么到底要不要使用继承呢?问一问自己是否需要从子类向父类进行向上转型。如果必须需要,则继承是必要的,但是如果不需要,则应当好好考虑自己是否需要继承。
三、多态
- 多态是指同一方法可以根据发送对象的不同而采用多种不同的行为方式。
- 多态是方法的多态,属性没有多态性。
3.1 向上转型
- 格式: 父类名称 对象名 = new 子类名称(); 例如:
Animal animal = new Cat();
- 含义: 右侧创建一个子类对象,把他当做父类对象来看待。
- 向上转型一定是安全的,但是一旦向上转型为父类,就无法调用子类特有的方法。从小范围转向大范围,如从猫转型成动物。
- 对象的向上转型就是多态。
3.2 多态的实现
- 三个必要条件
- 继承: 在多态中必须存在有继承关系的子类和父类。
- 重写: 子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
- 向上转型: 在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。
- 对于引用子类的父类类型,在处理该引用时,它适用于继承该父类的所有子类,子类对象的不同,对方法的实现也就不同,执行相同动作产生的行为也就不同。
3.3 拓展
- 向下转型
- 格式: 子类名称 对象名 = (子类名称) 父类对象;例如:
Cat cat = (Cat) obj;
- 含义: 将父类对象,“还原”成本来的子类对象。
- 向下转型可能会丢失自己本来的一些方法(父类所没有的方法)。
- 格式: 子类名称 对象名 = (子类名称) 父类对象;例如: