面向对象的常见面试题

面向对象的常见面试题

文章目录

  • 前言
  • 一、接口和抽象类区别
  • 二、构造方法能否被重写
  • 三、==和equals的区别
  • 四、拆箱和装箱
  • 五、重载和重写需要满足的条件
  • 六、final,finally,finalize的区别
  • 七、接口是否能继承接口,抽象类是否可实现接口,抽象类是否可继承实现类
  • 八、abstract方法是否能是静态的,能否是synchronized
  • 九、try中有return时finally会不会执行,何时执行
  • 十、面向对象特征
  • 十一、int和Integer的区别
  • 十二、静态变量和实例变量
  • 十三、对象持久化的含义,为何要对象持久化
  • 十四、final的用处
  • 十五、从变量、构造方法、方法的角度,阐述抽象类和接口的区别?


前言

面向对象,看起来很简单,其实,在面试的时候会有许许多多的坑等着我们去踩,所以,在这里我将列举出一些常见的关于面向对象的常见的面试题

一、接口和抽象类区别

抽象类:用abstract修饰,可以有普通方法和抽象方法,可以有变量,可以有构造方法,单继承
接口:用interface修饰,所有方法都是抽象方法,只能有final static修饰的全局常量,无构造方法,多实现
共同点:都不能通过new实例化对象

二、构造方法能否被重写

不能,子类和父类类名不同,而构造器和类名是同名的,故构造器不能继承,由于不能继承,故不能重写

三、==和equals的区别

基本数据类型:= =比较两者值是否相同
引用数据类型:= =比较两者地址是否相同,equals比较二者值是否相同,在比较引用数据类型时,通常需要重写equals方法

四、拆箱和装箱

装箱:基本数据类型转换成包装类
拆箱:包装类转换成基本数据类型

五、重载和重写需要满足的条件

重载:同一个类中,方法名相同,参数不同
重写:子类继承父类中的方法,方法名,返回值类型,参数均相同,修饰权限不能低于父类

六、final,finally,finalize的区别

final是定义类,方法,变量的关键字,定义类时不能被继承,定义方法时不能重写,定义变量时为常量
finally是异常处理的一个关键字,表示内容一定会执行
finalize是Object的一个类,垃圾回收器执行时起作用

七、接口是否能继承接口,抽象类是否可实现接口,抽象类是否可继承实现类

接口可继承接口,抽象类可继承接口,抽象类可继承实现类 但实现类必须要有构造方法

八、abstract方法是否能是静态的,能否是synchronized

都不可以,抽象方法只有声明没有实现,static是直接运行的,抽象类运行无意义
而synchronized是同步锁,而同步只有具体操作才能实现

九、try中有return时finally会不会执行,何时执行

finally会执行,在return之前执行

十、面向对象特征

封装:将各种逻辑私有,仅对外留一个公共的接口供使用
继承:子类可以使用父类的非私有方法和属性并进行扩展
多态:不同对象可以对同一个消息作出响应

十一、int和Integer的区别

int是基本数据类型,默认0
Integer是int的包装类,属于引用数据类型,默认null

十二、静态变量和实例变量

静态变量用static修饰,属于类的变量,加载类时读取
实例变量没有static修饰,属于对象的变量,加载类时不读取

十三、对象持久化的含义,为何要对象持久化

对象持久化值将对象保存到数据库或文件中,方便用户使用

十四、final的用处

修饰类:不可被继承
修饰方法:不可重写
修饰变量:常量

十五、从变量、构造方法、方法的角度,阐述抽象类和接口的区别?

抽象类和接口有以下区别:

抽象类的变量没有限制,接口只包含常量,即接口的所有变量必须是public static final
抽象类包含构造方法,子类通过构造方法链调用构造方法,接口没有构造方法。
抽象类的方法没有限制,接口的方法必须是public abstract的实例方法,

同时需要注意:在新版的JDK中关于接口的规则有了一定的变化,
从Java8开始,接口方法可以由默认实现,
从Java9开始,接口内允许定义私有方法。

你可能感兴趣的:(面试,单元测试,java)