一、封装
- 封装即数据隐藏,利用抽象数据类型将数据和基于数据的操作封装在一起。数据隐藏在抽象数据类型内部,只保留一些对外的接口使之与外部发生联系。
- 使用封装有三个好处:
- 可以方便的更改内部实现而不影响其他实现;
- 可以对成员进行更精确的控制;(容易发现问题,方便修改类的内部实现)
- 隐藏信息,实现细节;
- 注意:
- 不要编写返回引用可变对象的访问器方法。如需要返回一个可变对象的引用,首先对它进行克隆。
二、 继承
复用代码是Java众多引人注目的功能之一。
- 继承:是使用已存在的类的行为作为基础建立新类的技术
- 特点:
- 子类拥有父类的非private的属性和方法;
- 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展;
- 子类可以用自己的方式实现父类的方法。
- 构造器:子类除了父类的private成员和方法外,构造器也不能继承:构造器只能被调用,不能被继承,通过super()调用父类的构造方法;
Java编译器会默认调用父类的构造器,前提是父类有默认构造器,否则要自己显示调用父类的构造器。
- Protected:
- Private:对于封装而言,是最好的选择,有时需要实现隐藏,又需要子类成员来访问,这时就需要proteced;
- 最好对属性成员保持private 属性,通过protected方法控制类的继承关系。
- 向上转型:
将子类转换为父类,在继承关系上向上移动,称为向上转型,是由一种专用类型向较通用的类型转换,所以安全。
- 慎用继承:
- 原因:破坏了封装,对于子类,父类的实现细节透明;继承是强耦合关系;父类变,子类就必须变;
- 如果需要向上转型,那么继承是需要的;
三、多态
- 多态是指:引用变量所指向的具体类型和通过该引用的方法调用在编程时并不确定,二在程序运行期间确定。
- 指向子类的父类引用向上转型后,只能访问父类拥有的方法和属性,对于父类中不存在的方法,引用是不能使用的;如子类重写了父类的方法,则调用时,调用的是子类定义的方法(动态链接、动态调用)
- Java实现多态有三个必要条件:继承,重写,向上转型
- 实现形式:
有两种形式可以实现多态:继承和接口
- 基于继承的表现是:子类对父类方法的重写;
- 通过接口:
通过实现接口并覆盖接口中同一方法的几不同的类体现的。
在接口的多态中,指向接口的引用必须是指定这实现了该接口的一个类的实例程序,在运行时,根据对象引用的实际类型来执行对应的方法。
- 继承中方法的调用顺序:
在继承链中对象方法的调用存在一个优先级:this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O)