用通俗易懂的语言来理解java面向对象的思想

大家都知道,java是面向对象的编程,掌握面向对象的编程思想是掌握java编程语言的核心,但是很多人在面向对象方面都存在或多或少的误区,有的是刚学完C语言,受面向过程思想干扰,在刚刚接触java的时候措手不及,感觉无从下手,我想通过自己对java的学习,用通俗易懂的语言,来谈谈自己对面向对象的理解,希望可以帮助大家来理解面向对象的编程思想。
理解面向对象的编程的思想,首先我想给大家一个非常熟悉的一个例子,让大家对面向对象和面向过程有一个大致的理解,想必大家都知道那个“老张开车去东北”的例子,用面向对象的思路理解:你首先得造一个车,然后包括挂档,每一步都得自己一步一步的线性去完成;用面向对象的思路来理解的话,直接调个车,找个司机,然后告诉他去东北,然后其他的就不用你管了,你可能隐约的感觉到,面向对象的思路似乎省了不少事。
理解面向对象的思想,首先我们需要知道在理解面向对象时需要知道的几个名词:对象,类,还有类中一些成员变量和成员方法,下面我们一一来进行分析:
[b]对象:[/b]
对象是人们要进行研究的任何事物,从简单的一个小分子到复杂的汽车飞机都可以看做对象,只是有时对象要根据人们研究问题的需要来确定,对象不一定是具体的,有时也可以表示抽象的规则或计划。
[b]类:[/b]
类在java中是具有相同或相似性质的对象的抽象体现形式。也就是说,类的实例化就是创建对象的过程类的实例就是对象。
其实类的创建在一定程度上是符合人的思维的,我想借一个例子来说明这个问题,同时熟悉一下类的大致结构:
我们创建一个People类:
package com.guang.email;

public class People {
private String head;
private String arms;
private String legs;

public People() {

}

public void hit(){
System.out.println("hit you");
}
public void eat(){
System.out.println("我要吃饭");
}

}

首先我们看一下类结构,有成员变量,成员方法,还有构造方法,对于结构这里就不多讲了,有很多同学不明白构造方法是干什么的,其实,构造方法是在实例化对象时执行的方法,一个类可以有很多构造方法,根据你创建对象时参数的不同来调用不同的构造方法,这就是所说的重载。
对于People类我们就叫他人类吧,你说人类是个什么,你可以摸的着吗,其实他就是一个定义,一个抽象的东西,但是当我们在对他实例化时,你就可以知道他是一个具体存在的东西:例如:
People jim = new People();
jim.hit();
jim.eat();

我们实例化出了jim这个人的对象,是真实存在的,具体的,有头,有胳膊,还有腿等,并且他还可以打人,吃饭。
其实面向对象并不难,很接近我们现实生活的,就是通过我们对自然界的认知,经过一点点的转变,就转换到编程语言上来了,也就是说,你用自然的思维去理解考虑问题就可以了,但是刚开始我们会不习惯,就像Thinking in java 里写的那样:“我们可能会被这种简单性所难倒”你需要一段时间去习惯,开始的时候可以先模仿,写的多了可能慢慢就会体会到面向对象的奥妙。
理解了上面对面向对象的一些基础的东西以后,我们来看面向对象的三个特性:封装、继承、多态。看似简单的六个字,却是面向对象的核心,下面我们一起来看看这三个特性:
[b]封装:[/b]
面向对象最基础的一个特性,封装性,封装是根据需要,把代码和指令代码捆在一起,就像一个保护器,防止外界代码随意的访问,而是根据该保护器定义的接口来控制,封装的好处是根据问题的需要,封装代码的好处是每个人都知道怎样访问代码,进而无需考虑实现细节就能直接使用它,也不用担心其他的一些副作用。
在JAVA中,最基本的封装单元是类,一个类定义着将由一组对象所共享的行为(数据和代码).一个类的每个对象均包含它所定义的结构与行为,这些对象就好象是一个模子铸造出来的.所以对象也叫做类的实例。

  在定义一个类时,需要指定构成该类的代码与数据.特别是,类所定义的对象叫做成员变量或实例变量.操作数据的代码叫做成员方法.方法定义怎样使用成员变量,这意味着类的行为和接口要由操作实例数据的方法来定义。

  由于类的用途是封装复杂性,所以类的内部有隐藏实现复杂性的机制.所以JAVA中提供了私有和公有的访问模式,类的公有接口代表外部的用户应该知道或可以知道的每件东西.私有的方法数据只能通过该类的成员代码来访问.这就可以确保不会发生不希望的事情。

[b]继承 [/b]
  继承是指一个对象从另一个对象中获得属性的过程.是面向对象程序设计的三大原则之二,它支持按层次分类的概念.例如,黑种人是人的一种,美国人有时白种人的一种,.如果不使用层次的概念,每个对象需要明确定义各自的全部特征.通过层次分类方式,一个对象只需要在它的类中定义是它成为唯一的 各个属性,然后从父类中继承它的通用属性.因此,正是由于继承机制,才使得一个对象可以成为一个通用类的一个特定实例.一个深度继承的子类将继承它在类层次中的每个祖先的所有属性。

  继承与封装可以互相作用.如果一个给定的类封装了某些属性,它的任何子类将会含有同样得属性,另加各个子类所有得属性.这是面向对象程序在复杂性上呈线性而非几何增长的一个重要概念.新的子类继承其所有祖先的所有属性.子类和系统中的其他代码不会产生无法预料的交互作用。

 [b] 多态 [/b]
  多态是指一个方法只能有一个名称,但可以有许多形态,也就是程序中可以定义多个同名的方法,用"一个接口,多个方法"来描述.可以通过方法的参数和类型引用。多态使得对象间交互更为灵活。

封装,继承,多态的组合使用 :

  在由封装,继承,多态所组成的环境中,程序员可以编写出比面向过程模型更健壮,更具扩展性的程序.经过仔细设计的类层次结构是重用代码的基础.封装能让程序员不必修改公有接口的代码即可实现程序的移植.多态能使程序员开发出简洁,易懂,易修改的代码.同样,通过使用面向对象的设计原则,程序员可以把一个复杂程序的各个构件组合在一起,形成一个一致,健壮,可维护的程序

总的来说,所谓封装,就是通过定义类并且给类的属性和方法加上访问控制来抽象事物的本质特性。所谓继承,就是代码重用,而多态,从另外一个角度分割了接口和实现。
理解了之后这些之后,想必你对面向对象会有一个新的认识,那么,接下来,可以找个小的程序题,或者生活中的某个应用,来自己设计并实现它吧。
编程来源于生活,又回归与生活。

你可能感兴趣的:(java)