什么是面向对象

编程语言是人类和计算机沟通的语言,C语言是早期的高级语言,程序员将解决问题的过程输入计算机,并由计算机一步一步执行,所有执行的步骤都是由程序员所控制,C语言即为面向过程的语言,因为C程序是解决问题的过程。
而Java支持面向对象,即可以统一解决一类问题,很符合人类的思维直觉。
例如人类作为一个类,有共同特点,例如人类都有姓名,都有自主意识,那么我们只需要创建出有意识、有姓名的一个类别,那么属于这个类别的物体都可以认为是人类,问题可以统一解决,可以多次复用。

面向对象简介

面向对象中的对象指的是类的对象,人类是一个类,张三是人类,他有人类所有的特征,所以张三是一个对象。
张三有人类的特点,例如姓名和年龄,这些特点在面向对象中又称为属性、一个类的所有对象都有一样的属性,而张三可以进行艺术创作,可以进行语言交流,可以学习技能、可以参加工作,这些可选的特点又称为方法,类由属性和方法构成。
通常我们将成员变量(即类里的变量)称为属性,而类提供的函数称为方法。

面向对象特点

面向对象有四个特点,注意这里是面向对象的特点,而不是Java的特点,所有的面向对象语言都拥有这四个特点,而Java拥有除此之外的更多特点,可以是与其他语言不同的或相同的特点。例如Java拥有容易上手的泛型,C++拥有极其灵活的元编程。

抽象

忽略一个主题中与当前目标无关的东西,专注的注意与当前目标有关的方面。(就是把现实世界中的某一类东西,提取出来,用程序代码表示,抽象出来的一般叫做类或者接口)。抽象并不打算了解全部问题,而是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一个数据抽象,而是过程抽象。
数据抽象 —>表示世界中一类事物的特征,就是对象的属性。比如鸟有翅膀,羽毛等(类的属性)
过程抽象 —>表示世界中一类事物的行为,就是对象的行为。比如鸟会飞,会叫(类的方法)

封装

封装是面向对象的特征之一,是对象和类概念的主要特性。封装就是把过程和数据包围起来,对数据的访问只能通过已定义的界面。如私有变量,用set,get方法获取。
封装保证了模块具有较好的独立性,使得程序维护修改较为容易。对应用程序的修改仅限于类的内部,因而可以将应用程序修改带来的影响减少到最低限度。

继承

一种联结类的层次模型,并且允许和鼓励类的重用,提供一种明确表达共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),原始类称为新类的基类(父类)。派生类可以从它的父类哪里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。因此可以说,继承为了重用父类代码,同时为实现多态性作准备。

多态

多态是指允许不同类的对象对同一消息做出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活/抽象/行为共享/代码共享的优势,很好的解决了应用程序函数同名问题。总的来说,方法的重写,重载与动态链接构成多态性。java引入多态的概念原因之一就是弥补类的单继承带来的功能不足。
动态链接 —>对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将调用子类中的这个方法,这就是动态链接。

  1. package yuque.phil616.oop;
  2. /**
  3. *
  4. * @author phil616
  5. * Human是一个类,类里面包含了属性和方法
  6. *
  7. * */
  8. public class Human {
  9. //name和height是Human类的两个属性,本质上是变量
  10. String name;
  11. int height;
  12. /**
  13. * getName 和 getHeight是类中的两个方法,本质上是函数
  14. * @return String
  15. *
  16. */
  17. String getName(){
  18. return this.name;
  19. }
  20. int getHeight(){
  21. return this.height;
  22. }
  23. }