【Java核心面试宝典】Day8、面向对象常见面试题汇总(三)
Hello,你好呀,我是
灰小猿
!一个超会写bug的程序猿!
用坚持缔造技术、用指尖敲动未来!
和很多小伙伴们一样,我也是一名奔波在Java道路上的“创造者
”。也想靠技术来改未来,改变世界!因为我们坚信每一次敲动键盘都能让生活变得更智能、世界变得更有趣
!
在此专栏《Java核心面试宝典》记录我们备战梦想的【day 8】
!
面向对象作为我们在Java编程的核心思想,在面试上的考察点还是非常的多的,之前已经和小伙伴们总结了两篇有关面向对象的面试题了,今天继续~~~
1、在继承关系中,子类是不是父类的子集?
子类不是父类的子集,子类包含父类所有的类成员,同时还有自己特有的成员变量,所以子类通常包含比父类更多的类成员。
2、定义继承关系时,父类和子类之间应存在什么关系?
父类与子类之间应存在is-a
的关系
3、super
关键字的作用是什么?
关键字 super
指向当前类的的父类。关键字 super 可以用于两种途径,一是调用父类的构造方法,二是调用父类的方法。
调用父类的构造方法,使用 super()
或 super(参数)
,该语句必须是子类构造方法的第一个语句,且这是调用父类构造方法的唯一方式。
调用父类的方法,使用 super.方法名(参数)
。
4、有继承关系时,构造方法的调用顺序是怎样的?
构造一个类的实例时,会沿着继承链调用所有父类的构造方法,父类的构造方法在子类的构造方法之前调用,即构造方法的调用顺序是从父类到子类的。
如下面的实例:
public class Class3 extends Class2 {
public static void main(String[] args) {
new Class3();
}
public Class3() {
System.out.println("D");
}
}
class Class2 extends Class1 {
public Class2() {
this("B");
System.out.println("C");
}
public Class2(String s) {
System.out.println(s);
}
}
class Class1 {
public Class1() {
System.out.println("A");
}
}
解释一下上面的程序:
由于 Class2 是 Class1 的子类,Class3 是 Class2 的子类,因此在 Class3 的构造方法中的所有语句运行之前,先调用 Class2 的无参数构造方法。Class2 的无参数构造方法调用了有参数构造方法,在 Class2 的有参数构造方法中的所有语句运行之前,先调用 Class1 的无参数构造方法。因此,运行上述代码得到的输出结果是:
A
B
C
D
5、重写中,子类的方法返回值类型是否可以与父类的不完全一致?
如果返回值类型是基本数据类型或void,则必须保持一致,如果父类的返回值是引用数据类型,则子类的返回值类型必须与父类一致或者是父类返回值类型的子类。
6、重写和重载的区别是什么?
重载
是指一个类中定义多个方法,这些方法有相同的名称,但是方法的签名不同;
重写
是指在子类中定义一个方法,该方法与父类中的该方法的签名相同,返回值类型相同或者子类返回值是父类方法返回值的子类。
重载 | 重写 | |
---|---|---|
场合 | 同一个类 | 父类和子类 |
方法名称 | 相同 | 相同 |
方法签名 | 不同 | 相同 |
返回值类型 | 可以不同 | 相同或者子类返回值类型是父类返回值类型的子类 |
7、可见性修饰符protected表示可以从哪里访问类成员?
可见性修饰符 protected
表示类成员可以在同一个包里的任何类中访问,也可以在继承了该类的子类中访问。
8、关键字final用于修饰类和方法时,其含义是什么?
使用final
修饰的类是终极类
,不能被继承。使用final修饰的方法不能被子类重写。
9、什么是native方法?
关键字native
表示实现方法的编程语言不是Java
10、判断两个对象内容是否相等时,是否可以使用“== ”?应该使用什么方法?
判断两个对象内容是否相等应该使用equals方法,而不能使用“ == ”,“==”的作用是判断两个对象是否具有相同的引用
。
11、重写equals方法有什么要求?
根据散列约定,如果两个对象相同,他们的散列码一定相同,因此如果重写了equals方法,必须重写hashCode方法,
以保证两个相等的对象对应的散列码是相同的。
12、说一说Object类中的finalize方法?
protected void finalize() throws Throwable
finalize方法用于垃圾回收,如果一个对象不能再被访问,就变成了垃圾,finalize 方法会被该对象的垃圾回收程序调用。该方法的默认实现不做任何事,如果必要,子类应该重写该方法。
该方法可能抛出 Throwable 异常。所以轻易不要重写finalize()方法,
否则会导致垃圾回收出现问题,从而产生内存泄露问题
今日总结
今天和大家分享有关继承和Object类的一些常见面试题,我们需要掌握继承中的调用顺序
,方法重写和重载的区别
,equals和“==”的区别
等。
面向对象的面试题比较多,之后还会继续总结,如果小伙伴们有遇到其他相关的面试题,==欢迎在评论区留言提出,我会把大家提出的总结到文章内`,== 欢迎小伙伴们一起评论区打卡学习!小伙伴们可也在左方加我好友一起探讨学习!
我是==灰小猿==,我们下期见!
- 点赞
- 收藏
- 关注作者
评论(0)