专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 职业指南 高频出现的面向对象面试题

高频出现的面向对象面试题

更新时间:2022-12-16 16:08:16 来源:动力节点 浏览590次

1.Java中实现多态的机制是什么

在 Java 语言中,多态主要有以下两种表现方式:

1)方法的重载(overload)。重载是指同一个类中有多个同名的方法,但这些方法有着不同的参数,因此在编译时就可以确定到底调用哪个方法,它是一种编译时多态。重载可以被看作一个类中的方法多态性。

2)方法的覆盖(overide)。子类可以覆盖父类的方法,因此同样的方法会在父类与子类中有着不同的表现形式。在 Java 语言中,基类的引用变量不仅可以指向基类的实例对象,也可以指向其子类的实例对象。同样,接口的引用变量也可以指向其实现类的实例对象,而程序调用的方法在运行期才动态绑定(绑定指的是将一个方法调用和一个方法主体连接到一起),就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。通过这种动态绑定的方法实现了多态。由于只有在运行时才能确定调用哪个方法,因此通过方法覆盖实现的多态也可以被称为运行时多态。

2.什么是Java序列化,如何实现

什么是序列化:序列化是java提供的一种机制,通过这种机制,一个对象可以表示为一个字节序列,存储到磁盘中。将序列化的对象写入文件后,通过反序列化从文件中读取出来。

为什么要序列化:对象、文件、数据有很多种格式,很难统一传输和保存,序列化后就可以将这些数据转换成统一格式,方便传输。使用时再将其反序列化即可。

序列化过程:

(1)继承Serializable接口,并且设置serialVersionUID。

(2)定义文件存储位置

(3)实现writeUser方法

3.一个”.java”源文件中是否可以包括多个类(不是内部类)?有什么限制(明略数据)

可以有多个类,但是只能有一个public的类,带public的类的类名必须和文件名一致。

4.Overload 和 Override 的区别。

1、重载发生在本类,重写发生在父类与子类之间;

2、重载的方法名必须相同,重写的方法名相同且返回值类型必须相同;

3、重载的参数列表不同,重写的参数列表必须相同。

4、重写的访问权限不能比父类中被重写的方法的访问权限更低。

5、构造方法不能被重写

5.super和this的区别?

this表示当前类对象,super表示当前类的父类

(1)属性的区别:this访问该类的属性,子类中没有找父类中的属性。super访问父类中的属性。

(2)方法的区别:this访问该类的方法,子类中没有找父类中的方法。super访问父类中的方法。

(3)构造的区别:this调用本类构造,务必放在构造方法的第一行。super调用父类构造,务必放在子类构造方法首行。

6.接口与抽象类的区别?

(1)抽象类要被类继承,接口要被类实现;

(2)接口可多继承接口,但是类只能单继承;

(3)抽象类可以有构造器,但是接口不能有构造器

(4)抽象类:除了不能实例化抽象类之外,其他和普通类没区别

(5)抽象类:抽象方法可以有public、protected、缺省这些修饰符,接口只能是public

(6)抽象类可以有成员变量,接口只能声明常量

7.构造方法可否能被重写?

构造方法不能被重写

8.接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承实现类(concrete class)?

1、接口可以继承接口,抽象类不可以继承接口,但可以实现接口。

2、抽象类可以继承实体类。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。

3.抽象类可以继承实体类,就是因为抽象类的可以继承性和有方法。

4、一个接口可以继承多个接口. interface C extends A, B {}是可以的. 一个类可以实现多个接口: class D implements A,B,C{} 但是一个类只能继承一个类,不能继承多个类 class B extends A{} 在继承类的同时,也可以实现接口: class E extends D implements A,B,C{} 这也正是选择用接口而不是抽象类的原因。

9.类的组成和执行顺序?

1.先执行Test类的静态代码块后执行Test类的main方法,说明要执行类的方法需要先加载这个类。

2.在创建ClassB的对象时,先去加载了父类ClassA。说明加载子类时如果没有加载父类,会先加载父类。

3.静态变量赋值和静态代码块都会在类加载的时候执行,执行顺序与静态变量和静态代码块出现的先后顺序一致。

4.如果在类的静态代码块执行之前创建该类的对象,则会先执行该类的构造代码块和构造方法。

5.构造代码块总是在构造函数之前执行。

6.创建子类对象,需要先初始化父类的对象。所以先执行父类的构造代码块和构造方法,再执行子类的构造代码块和构造方法

以上就是“高频出现的面向对象面试题”,你能回答上来吗?如果想要了解更多的Java面试题相关内容,可以关注动力节点Java官网。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>