什么是面向对象
我们知道Java是面向对象的语言,经常听别人说”万物皆对象“,那么到底什么是面向对象呢?其实早在70年代IBM就提及了这个思想,且在Smaltalk语言中进行了应用。后来根据面向对象的设计思路,才形成了C++,而由C++则产生了Java。但是在面向对象设计之前,广泛采用的是面向过程,面向过程只是针对于自己来解决问题。面向过程的操作是以程序的基本功能实现为主,实现之后就完成了,也不考虑修改的可能性,面向对象,更多的是要进行子模块化的设计,每一个模块都需要单独存在,并且可以被重复利用,所以,面向对象的开发更像是一个具备标准的开发模式。
面向过程:一步一步执行,一次一次操作,每个步骤都是静态顺序执行的。就比做开车:第一步,先开车门;第二步,上车;第三步,系安全带;第四步,打火;第五步,汽车发动开始行驶;第六步,直行/左拐/右拐;第七步,到达目的地。每一个步骤又分许多小步骤,比如开车门需要多大力气,上车需要迈几步等等。
面向对象:以对象为核心,把任何事物比作是一个对象,形成模块化的结构来实现程序的最终目的。就拿开车来举例:把人看作是一个对象,把车看作另一个对象。人要去开车,怎么开呢?不去管,我现在只需要告诉车这个对象:“这个人要开着你去往哪里哪里”,至于你要怎么开,我不关心。这就是面向对象的主要思想。
本质:
以面向对象的方式用类来组织代码,用对象封装数据。可以这样理解,面向过程强调过程,而面向对象强调结果。
类与对象的关系
在现实社会中,是先有的对象,再有的类。比如说:先有的人这个对象,人呢又有好多,按肤色可分为:黄种人、白种人、黑种人;按国家又可分为上百种。因为这么多的对象确立了之后,才有了“人类”这个类。但是在Java中是完全与这个概念相反的,Java中是先有类,再有的对象。比如现在有一个人类(People class),在这个class中你才能声明这个类的共有属性,构写方法。根据这个类你才能创造出对象。并且,在Java中无论在写什么程序时,第一步肯定是要先创建一个类。在Java中,先有具体的对象,然后抽象各个对象之间象的部分,归纳出类,通过类再认识其他对象。
对象的概念:指具体的事物,把一些属性和方法放在一起,作为一个相互依存的整体,把这个整体叫做对象。属性是对象的特征,方法是对象的行为。
类的概念:把针对对象的抽象(抽象:抽出象的部分)叫做类。
类和对象是面向对象编程思想中的核心与基础。类是作为对象的抽象而存在的,所有的对象都依据相应的类来产生,在面向对象的术语中,这个产生对象的过程称为“实例化”。类是用来描述一组具有相同特征对象的。类可以看成一类对象的模板,对象可以看成该类的一个具体的一个具体实例。类是用于描述同一类型的对象的一个抽象的概念,类中定义了这一类对象所应有的静态和动态属性。
面向对象三大特征:
①封装(encapsulation)
②继承(extends)
③多态(polymorphism)
示例
package com.cnblogs.lxj.objectoriented;
/**
* @packageName: com.cnblogs.lxj.objectoriented
* @className: People
* @description: 测试类与对象
* @author: liuxiaojiang
* @date: 2021/1/25
*/
public class People {
private String name; //姓名
private String gender; //性别
private int age; //年龄
private String telephone; //电话
/**
* @description: 学生方法
* @author: liuxiaojiang
* @date: 2021/1/25
* @param name:
* @param gender:
* @param age:
* @param telephone:
* @return: java.lang.String
**/
public String student(String name,String gender,int age,String telephone){
String str = "一名叫"+name+"的"+gender+"子年龄为"+age+",电话是:"+telephone;
return str;
}
/**
* @description: 主方法
* @author: liuxiaojiang
* @date: 2021/1/25
* @param args:
* @return: void
**/
public static void main(String[] args) {
People people = new People(); //创建一个人类对象
System.out.println(people.student("张三","男",22,"18888888888")); //调用学生方法,生成一个叫张三的学生
}
}
运行结果:
一名叫张三的男子年龄为22,电话是:18888888888