面向对象乃是Java语言的核心,是程序设计的思想。Java语言的面向对象技术包括了面向对象面向过程的基本概念,面向对象的特征,Java语言的对象修饰符抽象类等一系列的知识点

首先让我们来了解一下什么是对象?

没错!要了解面向对象我们肯定需要先知道对象到底是什么玩意儿。关于对象的理解很简单,在我们的身边,每一种事物的存在都是一种对象。总结为一句话也就是:对象就是事物存在的实体。下面举个简单的例子,比如人类就是一个对象,然而对象是有属性和方法的,那么身高,体重,年龄,姓名,性别这些是每个人都有的特征可以概括为属性,当然了我们还会思考,学习,这些行为相当于对象的方法。不过,不同的对象有不同的行为

面向对象的特征

面向对象编程是什么语言(什么是面向对象的编程思想)(1)

图1 面向对象编程方法

封装:就是把属性私有化,提供公共方法访问私有对象。举个简单的例子,我们去Apple店里买个iPhoneX,我们不需要知道它是怎么制造的,我们只需要知道它能用来打电话,上网和用来装B就行了。对于程序设计,用户只需要知道类中某个方法实现了什么样的功能,需要该功能的时候直接去调用就行了,不用去关心方法内部的实现细节

继承:当多个类具有相同的特征(属性)和行为(方法)时,可以将相同的部分抽取出来放到一个类中作为父类,其它类继承这个父类。继承后子 类自动拥有了父类的属性和方法,比如猫,狗,熊猫他们共同的特征都是动物,有颜色,会跑,会叫等特征。我们可以把这些特征抽象成我一个Animal类(也就是父类)。然而他们也有自己独特的特性,比如猫会抓老鼠,喵喵叫,熊猫有黑眼圈,能吃竹子,狗会汪汪。于是我们就根据这些独特的特征分别抽象出来Cat,Dog,Panda类等。他们拥有Animal类的一般属性和方法,也拥有自己特有的某些属性和方法。

但特别注意的是,父类的私有属性(private)和构造方法不能被继承。另外子类可以写自己特有的属性和方法,目 的 是实现功能的扩展,子类也可以复写父类的方法,即方法的重写。子类不能继承父类中访问权限private的成员变量和方法

多态:简单来说就是“一种定义,多种实现”。同一类事物表现出多种形态。Java语言中有方法重载对象多态两种形式的多态

方法重载:在一个类中,允许多个方法使用同一个名字,但是方法的参数不同,完成的功能也不同

对象多态:子类对象可以与父类对象进行相互转换,而且根据其使用的子类的不同,完成的功能也不同

抽象:抽象是从许多事物中,舍弃个表的,非本质的属性,抽取出共同的,本质的属性的过程。例如教师,学生和工人,他们共同的特质是人类,既然是人类就有共同的属性:性别,年龄,身高,体重等。抽象的过程就是比较的过程,通过比较找出事物之间的共同属性,通过比较区分本质。

类与对象的关系

所有的事物都可以看做是一个对象,是对象就具有一定的属性和功能,这些对象是可以建立起联系的,而且这些对象是由类来构造的。类是具有属性和方法的一组对象的集合,对象是实际存在的该类事物的个体

在面向对象中,类和对象是最基本和最重要的组成单元。类实际上是表示一个客观世界某类群体的一些基本特征抽象,对象就表示一个个具体的东西,对象是以类模板创建的。

举个简单的例子:兰博基尼跑车,在工厂里首先要由设计师设计出一个汽车图纸,然后再根据图纸去生产兰博基尼,这样生产出来的每一辆跑车结构和功能都是一样的。但是不同的款式有不同的特征,比如车的颜色,内部装饰,马力等。在这个例子中,设计图纸就是一个类,它规定看跑车应该拥有的基本部件。而根据这张图纸生产出来的每一辆跑车就是一个个实时存在的对象。它们的初始状态是一模一样的,如果其中某一辆颜色,发动机重新改了之后并不影响其他的跑车。

stati修饰符:

static关键字的中文含义是静态的意思。使用static修饰的成员变量,常量,方法和代码分别称为静态变量,静态常量,静态方法,静态代码块,它们统称为静态成员。静态成员归整个类所有,不依赖特定的实例,被类的所有实例所共享的。只要被JVM加载就可以根据类名在全局数据区内找到

类的成员变量分为两种:

  1. 实例变量 (ps:也就是没有被static关键字修饰的变量)
  2. 静态变量

两者之间的区别:

面向对象编程是什么语言(什么是面向对象的编程思想)(2)

图2 变量

访问静态变量

面向对象编程是什么语言(什么是面向对象的编程思想)(3)

图3 访问静态变量

静态方法和和静态变量一样,可以不通过本类的实例对象而通过“类名.静态方法名”就可以调用。静态方法不能访问本类的实例变量和实例方法。因为静态资源在编译时(对象未实例化时)就被加载了,而非静态资源在运行时才被加载,多以静态方法只能调用静态变量,不能调用非静态资源!~

实例方法就不一样了,可以访问静态和非静态成员,包括静态变量、静态常量、静态方法,实例变量和实例方法。

变量的作用域

面向对象编程是什么语言(什么是面向对象的编程思想)(4)

图4 变量作用域

访问控制符

Java语言中,访问修饰符可以出现在类,成员变量,成员方法以及构造方法前,用来控制权限。Java提供了4种级别的访问控制

  1. public 权限最宽 修饰的类,属性,方法不仅可以跨类还可以跨包访问
  2. private 权限最狭隘 修饰的类,属性,方法只能被该类的对象访问,即使是其子类也不能访问! 做的很绝-.-
  3. protected 介于public和private之间 修饰的类,属性,方法能被该类的对象,本包,子类访问(即使没和父类在同一包中)
  4. default 默认访问模式,只向同一个包中的类公开,即同包访问。

代码块

代码块分为普通代码块构造块静态代码块

静态代码块主要用于初始化类,为类的静态属性初始化,有以下几个特点:

  1. 静态代码块不能存在于任何方法体内
  2. 不能直接访问实例变量和实例方法(上面说过了原因)

JVM在加载类时就会执行静态代码块,所以静态代码块优先于主方法执行

面向对象编程是什么语言(什么是面向对象的编程思想)(5)

面向对象编程是什么语言(什么是面向对象的编程思想)(6)

从程序的运行结果我们可以发现,在public类中的静态代码块优先于主方法执行,主方法由于构造块执行,够造块优先于构造方法执行。但是值得我们注意的是,无论创建多少个对象,静态代码块只会执行一次

程序中的执行顺序

public中静态代码块 -->主方法-->构造块-->构造方法

,