继承
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类
继承方法,使得子类具有父类相同的行为。
继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也
可以用父类的功能,但不能选择性地继承父类。
继承是
is-a
的相互关系
继承的优点
将所有子类的共同属性放入父类,实现代码共享,避免重复,提高开发效率
可以使得修改扩展继承而来的实现比较简单
继承的缺陷
父类变,子类就必须变
继承破坏了封装,对于父类而言,它的实现细节对与子类来说都是透明的
继承是一种强耦合关系
特殊关键字
包
package
包是类或接口的容器,是一个用于避免命名冲突的名空间,是一个逻辑命名的概念,与具体的物理位置
无关
在具体的实现中,包名称经常和目录名称对应
什么是包
包是类的组织方式,提供名空间和访问控制
类似于文件系统的组织
声明包中的类
package
package
包名称
;
声明包要求是源代码文件的第一个语句。包定义之前可以添加注释信息
程序中最多只能有一条
package
语句,没有包定义的源代码文件成为默认包中的一部分
程序中如果有
package
语句
,
该语句必须是第一条语句(前面只能有注释或空行)
包的命名规则:
全小写
使用域名反转的方式定义,例如延安餐饮集团
yanan.com
的项目,定义包名称为
com.yanan
如果细分还可以引入功能定义部分,例如数据库访问
com.yanan.dao
包能将相关的源代码文件组织在一起
com.yanan.dao
其中存放操作数据库相关的类文件
com.yanan.biz
存放相关的业务类文件
包减少了名称冲突带来的问题
可以使用
package
指明源文件中的类属于哪个具体的包
package-info
中不能定义
public
和
private
的类,但是可以定义
friendly
的类及包常量,提供给统一包下面
的类进行共享
抽象
忽略掉一个对象或实体的细节而只关注其本质特征的过程,可以简化功能与格式,帮助用户与对象交互
是人类解决问题的基本法宝。良好的抽象策略可以控制问题的复杂程度,增强系统的通用性和可扩展性
抽象主要包括过程抽象和数据抽象
过程抽象是将问题域中具有明确功能定义的操作抽取出来,并将其作为一个实体看待
数据抽象是较过程抽象更高级别的抽象方式,将描述客体的属性和行为绑定在一起,实现统一的抽
象,从而达到对现实世界客体的真正模拟
面向对象的编程可以认为是面向类的编程。编写类的过程,相当于我们定义了一种新的数据类型。
面向对象编程的核心是面向抽象编程,面向抽象编程的核心是面向接口编程
面向对象和面向过程的区别
面向过程:
优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源
;
比如单片机、嵌入式
开发、
Linux/Unix
等一般采用面向过程开发,性能是最重要的因素。
缺点:没有面向对象易维护、易复用、易扩展
面向对象:
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系
统,使系统更加灵活、更加易于维护
缺点:性能比面向过程低