文末
我将这三次阿里面试的题目全部分专题整理出来,并附带上详细的答案解析,生成了一份PDF文档
- 第一个要分享给大家的就是算法和数据结构
- 第二个就是数据库的高频知识点与性能优化
- 第三个则是并发编程(72个知识点学习)
- 最后一个是各大JAVA架构专题的面试点+解析+我的一些学习的书籍资料
还有更多的Redis、MySQL、JVM、Kafka、微服务、Spring全家桶等学习笔记这里就不一一列举出来
class Bird extends Animal{
public void move(){
System.out.println(“鸟可以飞”);
}
}
class Dog extends Animal{
public void move(){
System.out.println(“狗可以跑”)
}
}
public class TestMain{
public static void main(String args[]){
Animal a = new Animal(); // Animal 对象
Animal b = new Bird(); //Bird对象
Animal c = new Dog(); // Dog 对象
a.move();// 执行 Animal 类的方法
b.move(); //执行Bird类的方法
c.move();//执行 Dog 类的方法
}
}
上述程序运行的结果
动物可以移动
鸟可以飞
狗可以跑
在这个案例中,Animal
是一个属于动物的抽象类,它定义了一个方法move()
。表示动物的具有的行为。
而动物只是一个泛类别,具体到某种动物时,行为方式是不同的,因此定义了Bird
和Doc
,分别继承了Animal
这个类,并且重写了move()
方法,分别实现这两种动物的行为方式。
重写的好处在于子类可以根据需要,定义特定于自己的行为。也就是说子类能够根据需要实现父类的方法。
在类继承关系中,父类的非抽象方法,子类是不强制要求重写的。在实际应用中,如果重写了父类的方法,并且实例对象的引用指向的是子类时,JVM会自动调用子类重写的方法,此时,父类的方法完全被屏蔽了。就像前面测试的代码。
父类引用指向子类实现Dog()
,此时调用c.move()
方法,只会调用到Dog
类中的move()
方法。如果Dog
子类没有重写move()
方法,则会调用父类Animal
的move()
方法。
Animal c = new Dog(); // Dog 对象
c.move();//执行 Dog 类的方法
在有些情况下,子类重写了父类的方法,我们希望在调用子类重写方法的同时,仍然能够调用到父类被重写的方法,怎么实现?
Super关键字
当需要在子类中调用父类的被重写方法时,要使用 super 关键字。
class Animal{
public void move(){
System.out.println(“动物可以移动”);
}
}
class Bird extends Animal{
public void move(){
super.move(); //增加super调用
System.out.println(“鸟可以飞”);
}
}
}
public class TestMain{
public static void main(String args[]){
Animal b = new Bird(); //Bird对象
b.move();//执行 Bird 类的方法
}
}
运行结果如下:
动物可以移动
鸟可以飞
方法的重写规则
总结一下,在Java中,方法重写的规则。
-
参数列表与被重写方法的参数列表必须完全相同。
-
返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类(java5 及更早版本返回类型要一样,java7 及更高版本可以不同)。
-
访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为 public,那么在子类中重写该方法就不能声明为 protected。
-
父类的成员方法只能被它的子类重写。
-
声明为 final 的方法不能被重写。
-
声明为 static 的方法不能被重写,但是能够被再次声明。
-
子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法。
-
子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。
-
重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
-
构造方法不能被重写。
-
如果不能继承一个类,则不能重写该类的方法。
基于接口实现的重写
基于接口实现的重写,在实际应用中,使用非常频繁,以线程实现为例,如图所示,表示Thread和Runnable的类关系图。
Runnable是一个接口,它定义了线程的执行方法,代码如下:
@FunctionalInterface
public interface Runnable {
/**
-
When an object implementing interface
Runnable
is used -
to create a thread, starting the thread causes the object’s
-
run
method to be called in that separately executing -
thread.
-
-
The general contract of the method
run
is that it may -
take any action whatsoever.
-
@see java.lang.Thread#run()
*/
public abstract void run();
}
在实际应用中,我们可以直接继承这个接口来声明一个线程。
Thread,是一个普通的线程类,它实现了Runnable接口,并且重写了Runnable这个接口的run
方法,这里这么设计的目的是:避免Java中一个类只能实现一个接口这一规则
导致,如果一个类已经继承了其他的接口,但是又想要去实现线程时的问题。
public
class Thread implements Runnable {
@Override
public void run() {
if (target != null) {
target.run();
}
}
}
由于接口只是用来做规范设计,用来描述某个对象具有什么行为,但是它并没有具体的实现,因此如果需要声明一个线程,就需要实现该接口并且重写里面的抽象方法(接口中未实现的方法都是抽象的,子类必须要重写)。
Thread类中重写了Runnable中的run
方法,该方法调用了target.run()
。这个target
是真正的线程业务实现,Thread只是一个委派设计模式。
因此,如果我们想通过继承Thread
来实现线程,则需要按照如下代码的写法来实现,其中target
就是代表着子类的App
这个对象实例。
public class App extends Thread{
@Override
public void run() {
//doSomething
}
}
由于接口只是一种行为规范,本身不提供实现,因此实现接口的子类,都“必须”要重写父类的方法,这个和类继承是有区别的。
重载
–
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
最常用的地方就是构造器的重载,比如在ThreadPoolExecutor
线程池的实现类中,可看到如下的重载方法。
最后
分享一套我整理的面试干货,这份文档结合了我多年的面试官经验,站在面试官的角度来告诉你,面试官提的那些问题他最想听到你给他的回答是什么,分享出来帮助那些对前途感到迷茫的朋友。
面试经验技巧篇
- 经验技巧1 如何巧妙地回答面试官的问题
- 经验技巧2 如何回答技术性的问题
- 经验技巧3 如何回答非技术性问题
- 经验技巧4 如何回答快速估算类问题
- 经验技巧5 如何回答算法设计问题
- 经验技巧6 如何回答系统设计题
- 经验技巧7 如何解决求职中的时间冲突问题
- 经验技巧8 如果面试问题曾经遇见过,是否要告知面试官
- 经验技巧9 在被企业拒绝后是否可以再申请
- 经验技巧10 如何应对自己不会回答的问题
- 经验技巧11 如何应对面试官的“激将法”语言
- 经验技巧12 如何处理与面试官持不同观点这个问题
- 经验技巧13 什么是职场暗语
面试真题篇
- 真题详解1 某知名互联网下载服务提供商软件工程师笔试题
- 真题详解2 某知名社交平台软件工程师笔试题
- 真题详解3 某知名安全软件服务提供商软件工程师笔试题
- 真题详解4 某知名互联网金融企业软件工程师笔试题
- 真题详解5 某知名搜索引擎提供商软件工程师笔试题
- 真题详解6 某初创公司软件工程师笔试题
- 真题详解7 某知名游戏软件开发公司软件工程师笔试题
- 真题详解8 某知名电子商务公司软件工程师笔试题
- 真题详解9 某顶级生活消费类网站软件工程师笔试题
- 真题详解10 某知名门户网站软件工程师笔试题
- 真题详解11 某知名互联网金融企业软件工程师笔试题
- 真题详解12 国内某知名网络设备提供商软件工程师笔试题
- 真题详解13 国内某顶级手机制造商软件工程师笔试题
- 真题详解14 某顶级大数据综合服务提供商软件工程师笔试题
- 真题详解15 某著名社交类上市公司软件工程师笔试题
- 真题详解16 某知名互联网公司软件工程师笔试题
- 真题详解17 某知名网络安全公司校园招聘技术类笔试题
- 真题详解18 某知名互联网游戏公司校园招聘运维开发岗笔试题
资料整理不易,点个关注再走吧
商软件工程师笔试题
- 真题详解14 某顶级大数据综合服务提供商软件工程师笔试题
- 真题详解15 某著名社交类上市公司软件工程师笔试题
- 真题详解16 某知名互联网公司软件工程师笔试题
- 真题详解17 某知名网络安全公司校园招聘技术类笔试题
- 真题详解18 某知名互联网游戏公司校园招聘运维开发岗笔试题
[外链图片转存中…(img-fIB0seoq-1715343601021)]
资料整理不易,点个关注再走吧