java面试100道之第一道:什么是面向对象?谈谈你面向对象的理解

第一道问题:什么是面向对象?谈谈你面向对象的理解

回答:

首先我们应该来对比的看。

对比面向过程,是两种不同的处理问题的角度。

与面向过程的步骤化编程相比,面向对象就像从一个乐队的演奏者变成了指挥者。演奏者需要关心每一个音符,而指挥者只需要知道你是钢琴手还是小提琴手

面向过程更注重事情的每一个步骤及其顺序,而面向对象更注重事情有哪些参与者(其实质就是对象),以及参与者需要做什么。

譬如:日常我们用洗衣机洗衣服

面向过程会将任务分解成一系列的步骤(其实质就是各个函数),第一步:打开洗衣机;第二步:把脏衣服放进去;第三步:放洗衣粉;第四步:清洗过程;第五步:烘干。

而面向对象会首先把这件事情拆分出人和洗衣机这两个对象,先不管人和洗衣机是怎么具体工作的,然后再考虑每个对象该做什么

人的任务就是:打开洗衣机 放衣服 放洗衣粉

洗衣机的任务就是:清洗,烘干

从以上例子可以看出,面向过程比较直接高效,直接开始就干;而面向对象更易于复用,扩展和维护。

紧接着就是面向对象的三大特征

1、封装:就是隐藏对象的属性和实现细节,仅对外提供公共访问方式。

封装的意义,在于明确标识出允许外部使用的所有成员函数和数据项。

外部调用无需关心内部实现。

比如:getset方法;orm框架(操作数据库,我们不关心链接如何建立的,SQL是如何执行的,只需要引入mybatis,掉用方法即可)

封装的好处: 隐藏类的实现细节;让使用者只能通过程序员规定的方法来访问数据;可以方便的加入存取控制语句,限制不合理操作.

封装时的权限控制符区别如下:

2、继承:

继承基类的属性和方法,并做出自己的改变和扩展。子类共性的方法或者属性直接使用父类的,而不需要自己再定义,只需要扩展自己个性化的东西

3、多态

基于对象所属类的不同,外部对同一个方法的调用,实际执行的逻辑不同。

多态的三个条件:

1.    继承的存在(继承是多态的基础,没有继承就没有多态).

2.    子类重写父类的方法(多态下调用子类重写的方法).

3.    父类引用变量指向子类对象(子类到父类的类型转换).

     子类转换成父类时的规则:

      将一个父类的引用指向一个子类的对象,称为向上转型(upcastiog),自动进行类型转换.

      此时通过父类引用调用的方法是子类覆盖或继承父类的方法,不是父类的方法.

      此时通过父类引用变量无法调用子类特有的方法.

如果父类要调用子类的特有方法就得将一个指向子类对象的父类引用赋给一个子类的引用,称为向下转型,此时必须进行强制类型转换.

例如:

我们可以看到变量名调用的方法是子类中的方法;但不是子类中特有的功能。多态性的便捷性体现在,子类对象可以随便换,但是变量名调用的方法不变。

猜你喜欢

转载自blog.csdn.net/qq_35207086/article/details/114319030