面向对象三个基本特征:1.封装 2.继承 3.多态
一. 封装
封装(encapsulation),也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
Java中封装的具体意义:
1.便于调用者调用
2.便于修改内部代码,提高可维护性
3.可进行数据完整性检测,保证数据的有效性可使用访问控制符,实现封装:
使用细节:一般使用private (除非本属性确定会让子类继承),要提供相应的get/set方法来访问相关属性,这些方法通常是public,从而提供对属性的读取操作。一些只用于本类的辅助性方法可以用private,希望其他类调用的方法用public。
二. 继承
继承(extends)是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
通过继承创建的新类称为“子类”或“派生类”。 被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。
子类继承父类,可以得到父类的全部属性和方法。《Thinking in Java》中说到,子类对象拥有父类对象的完整拷贝,实例化一个类是从最顶级的超类开始实例化的,是一层一层的包裹结构,private限制访问方式只能在类的内部,这仅仅是一个访问控制,实际上子类对象拥有父类对象的一切。
Java中只有单继承(一个类只能有一个直接父类),但可以通过接口实现多继承。
接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力。
子接口扩展某个父接口,将会获得父接口中所定义的一切。
三. 多态
多态(polymorphism)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。
实现多态,有两种方式:
- 覆盖(重写override),是指子类重新定义父类方法的做法。
- 重载(overload),是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)
多态的作用
封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。