更新时间:2022-12-16 16:08:16 来源:极悦 浏览680次
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官网。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习