java面试总结(1)之面向对象

1.如何理解面向对象(OOP)编程思想?

我理解的面向对象:把现实世界中的一类事物或一种行为抽象成为编程语言中的一个实体(类),然后操作这个类的各个对象的编程思想称为面向对象编程思想。

面向对象的特征:

封装:隐藏属性和具体实现过程,只向调用者暴露接口来操作对象的行为称为封装

继承    子类自动共享父类的所有非私有属性和成员方法的特征

多态    父类引用指向子类对象的特征称为多态

面向对象和面向过程的区别:

关于这个问题,似乎谁都明白,但又似乎没有一个人能把他说清楚,就如同什么是面向对象一样,谁都能说两句,但没有谁能说的让人眼前一亮的感觉,那么我也来,说两句

面向对象是对各个定义好的具备各种功能或者行为的对象的整合(或分工),最后完成一个程序

面向过程是按照既定的步骤去执行每一步操作,最后完成一个程序

面向对象编程软件的出现是为了解决面向过程编程软件在后期的肿胀而导致的无法再维护,目前来看有效果,但还不明显,不明显的根本就是,对面向对象的理解还是不够透彻

2.接口和抽象类的区别?

首先从java设计层面来区别:
接口是对某种行为的规范,抽象类是对某种行为共性的东西的模板化定义
即在定义一个规范的时候,首先使用接口定义,如果在实现该接口方法的过程中,发现某个或多个接口方法的实现都差不多相同,那么可以提取出来成为一个抽象类
该接口的其他实现类,不需要声明实现接口,只需要继承上述抽象类,然后去实现未被抽象类实现过的方法即可
那么我们会问,直接去掉接口规范,只保留一个抽象类,岂不是完全可以替代接口了
不是的,如果你需要定义一个和抽象类中实现的方法不同的实现,那么还是会要用到接口的,这就是抽象类不能取代接口的原因

然后从java编程层面来区别:
接口中只能是抽象方法
接口中定义的属性只能是静态常量

接口不能定义构造方法,抽象类可以定义构造(只能被子类super,不能用来实例化)

3.override和overload的区别?

java语言中存在方法重载和方法重写两种方式

重载:方法的声明相同,参数列表不同,与返回值无关,与异常无关

重写:发生在子类与父类之间的子类覆盖父类的方法的过程


你可能感兴趣的:(java面试总结(1)之面向对象)