面向对象程序设计(Object Oriented Programming)是把客观世界抽象成一个个的对象,并把对象作为编程的处理主体。Java语言是面向对象的程序设计语言,类和对象是面向对象的核心。类是对某一类对象共同特征的描述,也可以说是某一类对象的抽象概念。而对象是类的具体实例,有更多的具体细节。
人们归纳出的面向对象三大特征是封装、继承和多态。
一、封装(Encapsulation)
隐藏类的内部细节,只对外提供访问必要的隐藏细节的方法。因此,封装提出了两方面的要求:把该隐藏的隐藏,把该暴露的暴露。为了实现良好的封装,需要从两方面考虑:
- 将对象的成员变量和实现细节隐藏起来,不允许外部直接访问。
- 把方法暴露出来,让方法来控制对这些成员变量的安全访问和操作。
比如,启动电脑只需接通电源然后按下开机键即可,你不需要了解并手动实现将主机电源向主板供电,打开风扇,初始化启动程序…你只需要想清楚想做什么(what)即可,不需要想怎么做(how)
二、继承(Inheritance)
在Java语法中,使用 extends 关键字来实现子类继承父类。从英文原意来看,extends实为扩展,即从已有的类中拓展出一个新的类,实现了已有类的复用。翻译为继承也很好理解,子类继承自父类,子类获得了父类拥有的属性和方法。类似于生物学中的遗传现象,“龙生龙,凤生凤,老鼠生子打地洞”。
当然,子类继承自父类的特征后,一般也会有自己的特征,要不然两个类的特征一致容易造成代码冗余并且失去了复用父类目的的作用。这里的特征是指类的属性和方法。一个典型的例子是,子类重写(overwrite)父类的方法,实现了子类具体和个性的特征。
三、多态(polymorphism)
相同类型的变量,调用同一个方法时呈现出多种不同的行为特征,这就是多态。实现多态的支持是Java引用变量有两种类型:一个是编译时类型,一个是运行时类型。编译时类型有声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。如果编译时和运行时类型不一致,就可能出现多态。
看一个的多态例子:
- 创建一个宠物类,定义一个模糊的吃动作
public class Pet