面试题总结第一篇
- 面向对象
- 面向对象和面向过程的区别
- 面向对象三大特性
- Java是如何实现多态的
面向对象
面向对象和面向过程的区别
面向过程:
优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式
开发、Linux/Unix等一般采用面向过程开发,能是最重要的因素。
缺点:没有面向对象易维护、易复用、易扩展
面向对象:
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护
缺点:性能比面向过程低 面向过程是具体化的,流程化的,解决一个问题,你需要一步一步的分析,一步一步的实现。面向对象是模型化的,你只需抽象出一个类,这是一个封闭的盒子,在这里你拥有数据也拥有解决问题的方法。需要什么功能直接使用就可以了,不必去一步一步的实现,至于这个功能是如何实现的,管我 们什么事?我们会用就可以了。
面向对象的底层其实还是面向过程,把面向过程抽象成类,然后封装,方便我们使用的就是面向对象 了。
这里有两个例子能更好的理解:
面向过程----蛋炒饭
首先我们需要知道蛋炒饭的步骤:
1.将饭煮熟
2.将油倒入锅中预热
3.饭倒进锅里炒
4.打入鸡蛋开始炒饭
5.出锅
从上面可以看出,制作蛋炒饭是有步骤一步步进行的,我们只需要按照这样的步骤来就可以做出一份蛋炒饭,但是制作出来之后,如果你想吃火腿炒饭不想吃蛋炒饭了,那就只能把原来的蛋炒饭给倒掉重做一份火腿炒饭了
面向过程----食堂搭配
在学校食堂,我们学校是两荤一素9块钱,几十种菜品你可以按照自己的喜好随意的搭配,这样就可以自由组合多种搭配,如果不想吃某种菜,我们就可以选别的,直接换就行。
从这里就可以看出来,蛋炒饭是要均匀的混合在一起,难舍难分,也说明他们之间的耦合性很高。而食堂搭配饭菜都分离,想换就换,耦合度低
面向对象三大特性
面向对象的特征主要有以下几个方面:
继承:
继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为。从多种实现类中抽象出一个基类,使其具备多种实现类的共同特性,当实现类用extends关键字继承了基类(父类)后,实现了就具备了这些相同的属性。继承的类叫做子类,被继承的类叫做父类。比如猫类,狗类中可以抽象出一个动物类,具有猫和狗共同的特性(吃,跑,睡觉等)。Java通过extends关键字来实现继承,父类中通过private定义的变量和方法不会被继承,不能在子类中直接操作父类通过private定义的变量以及方法。
关于继承如下 3 点请记住:
- 子类拥有父类非 private 的属性和方法。
- 子类可以拥有自己属性和方法,即子类可以对父类进行扩展。
- 子类可以用自己的方式实现父类的方法。
封装:
封装隐藏了类内部的实现机制。对外界而言他的内部细节是隐藏的,暴露给外界的只是他的访问方法。
属性的封装:使用者只能通过事先制定好的方法来访问数据,可以方便的加入逻辑控制,限制对属性的不合理操作;
方法的封装:使用者按照既定的方式调用方法,不必关心方法的内部实现,便于使用,便于修改,增强代码的可维护性;
多态:
封装和继承最后归结于多态,多态指的是类和类的关系,两个类由继承关系,存在有方法的重写,故而可以在调用时有父类引用指向子类对象。。多态必备三个要素:继承,重写,父类引用指向子类对象
在Java中有两种形式可以实现多态:继承(多个子类对同一方法的重写)和接口 (实现接口并覆盖接口中同一方法)
注意: 在 Java 中, 调用某个类的方法, 究竟执行了哪段代码 (是父类方法的代码还是子类方法的代码) , 要看究竟这个引用指向的是父类对象还是子类对象. 这个过程是程序运行时决定的(而不是编译期), 因此称为 动态绑定
。
Java是如何实现多态的
所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而 导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时 所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。
多态分为编译时多态和运行时多态。中编辑时多态是静态的,主要是指方法的 重载,它是根据参数列表的不同来区分不同的函数,通过编辑之后会变成两个不同的函数,在运行时谈不上多态。而运行时多态是动态的,它是通过动态绑定来 实现的,也就是我们所说的多态性