Java面向对象与其三个特征的理解

一、面向对象与面向过程的区别:

1.面向过程,核心是过程二字。它是针对一个特定的问题去思考其解决步骤。解析题意,分析目的,画出流程图,按着步骤实现。这就是一种面向过程的思考方式。
2.面向对象离不开面向过程。用面向对象编程时,我们需要思考这个问题里面有哪些对象,然后给对象赋一些属性和方法,然后让每个对象去执行自己的方法,问题得到解决。面向对象可以帮助我们从宏观上把握、从整体上分析整个系统。 但是,具体到实现部分的微观操作(就是一个个方法),仍然需要面向过程的思路去处理。
3.可以通过以下3个例子来理解:
(1)下五子棋:
面向对象分为:①黑白双方 ②棋盘系统 ③规则系统三个对象,每个对象都有一定的功能与作用
面向过程则是按步骤进行:开始游戏、黑子走、白子走、不断重复直到决出胜负。
(2)把大象塞进冰箱
面向过程的做法:①打开冰箱门 ②把大象塞进去 ③关闭冰箱门(当有两个不同的人用不同的方法实现这样的步骤,我们需要为不同的人量身定做不同解决事情的方法。)
面向对象,找个对象帮你做事:我们把冰箱作为对象,①冰箱门可以被打开,②大象可以被塞进去,③冰箱门可以被关闭(面向对象写出通用的方法,屏蔽了所有人的差异)
(3)做饭
面向过程的方法写出来的程序看成一份蛋炒饭,而用面向对象写出来的程序是一份盖浇饭。(盖浇饭是把米饭和盖菜分别做好,想要什么盖菜就加什么盖菜)。

二、类和对象

将类看成一个饼干模型,那么对象则是饼干。对象也就是对类的具体化。我们把人看做一类的话,我们自己就是一个对象。假设我叫Tom,我是人,我有具体的名字,所以我是人这一个类的一个对象。
而一个对象,它又包括静态部分和动态部分,我们将静态部分称之为对象的属性,动态部分称之为对象执行的动作。比如,Tom是男性,他会游泳。男性则是他的静态属性,游泳则是他会的动作。书上给出的关于类的定义是“封装对象的属性和行为的载体”。所以定义类时,里面也会包含两个部分,成员变量和成员方法。成员变量就是对象的属性,成员方法则对应于类对象的行为。

三、面向对象的三个特性:封装性、继承性、多态性

我们可以先简单理解一下类的三个特征:
封装:就象-个盒子,你不需要知道里面有什么东西,只知道它有那些用处就行
继承:就象父子关系,儿子是父亲的继承
多态:好比一个父亲有多个儿子,各个儿子有不同的特征

1.类的封装:
将描述事物的数据和操作封装在一起,形成一个类;被封装的数据和操作只有通过提供的公共方法才能被外界访问(封装隐藏了对象的属性和实施细节),私有属性和方法是无法被访问的,表现了封装的隐藏性,增加数据的安全性。
我们可以用厨师做菜的例子来理解,作为顾客,不知道自己品尝的美食是由哪位厨师、用何种方式烹饪出来的,这种编程模式就是封装。
可以通过对类的成员设置一定的访问权限,实现类中成员的信息隐藏:
(1)访问修饰符:private、default、protected、public
在这里插入图片描述
(2)this关键字
this关键字代表当前对象
this.属性 调用当前属性
this.方法 调用当前方法
(3) 内部类:定义在另一个类里面的类。与之对应,包括内部类的类称为外部类。
①内部类提供了更好的封装,把内部类的所有信息隐藏在外部类内,不允许同一个包中的类访问该类。
②内部类的方法可以直接访问外部类的所有数据,包括私有的数据。

2.类的继承
子类的对象拥有父类的全部属性与方法。
比如,有个类“动物”,“哺乳动物”继承“动物”,再往下,“马”又继承了“哺乳动物”这个类。
(1)extends关键字:子类可以继承父类原有的属性和方法,也可以增加原来父类所不具备的属性和方法,或者直接重写父类中的某些方法。但重写实现不了父类的原有方法。
(2)super关键字:重写后还能再实现父类的方法
(3)所有类的父类都是Object类,它有3个重要的方法,分别是:getClass()方法(返回某个对象执行时的Class实例)、toString()方法(返回某个对象的字符串表示形式)、equals()方法(比较两个引用对象的地址是否相等)。
(4)注意final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写。
(5)接口:在JAVA不支持多继承的,实际上接口起到了类似多继承的作用,一个类只能继承另- -个类(或抽象类)但可以实现多个接口。打个比方,“张三”,他是一个“人”,因此他继承了“人”;与此同时,他是一个“司机”,他的平时行为还有开车”,很显然,这并不能从“人这个类里继承下来。怎么办? JAVA里只支持单继承,这个时候,接口就起到了作用,它定义了司机这个接口,“张三”实现了它,因此,他会开车了。

3.类的多态:
指在父类中定义的属性或方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或方法在父类及其各个子类中具有不同的语义。例如:"几何图形"的"绘图"方法,"椭圆"和"多边形"都是"几何图"的子类,其"绘图"方法功能不同。
在Java中,实现多态的方式有两种:
(1)编译时的多态(在编译阶段,具体调用哪个被重载的方法,编译器会根据参数的不同来静态确定调用相应的方法),通过方法的重载实现;
(2)运行时多态(由于子类继承了父类所有的属性(私有的除外),所以子类对象可以作为父类对象使用。程序中凡是使用父类对象的地方,都可以用子类对象来代替。一个对象可以通过引用子类的实例来调用子类的方法。),通过方法的重写实现。
(3)方法的重载是指在同一个类中,有多个方法名相同的方法,但是这些方法有着不同的参数列表,在编译期我们就可以确定到底调用哪个方法。
(4)方法的重写,子类重写父类中的方法(包括接口的实现),父类的引用不仅可以指向父类的对象,而且还可以指向子类的对象。当父类的引用指向子类的引用时,只有在运行时才能确定调用哪个方法。
其实在运行时的多态的实现,需要满足三个条件:①继承(包括接口的实现)②方法的重写 ③父类的引用指向子类对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值