1. this和super的区别
this | supper |
---|
当前对象的引用 | 父类对象的引用 |
this(): 调用当前类中其他的构造方法(必须在第一行) | super(): 调用父类的构造方法(必须放在第一行) |
this.data: 调用当前类中的属性 | super.data: 访问父类的属性 |
this.func: 调用当前类中的成员方法 | super.func: 调用父类的成员方法 |
2. 抽象类和接口的区别
抽象类(abstract) | 接口(Interface) |
---|
抽象方法 + 普通类 | 抽象方法 + 全局常量 |
各个访问修饰限定符均可 | public |
抽象类和类之间的关系: extends(继承) | 接口和类之间的关系: implement(实现) |
抽象类主要是用来被继承的 | 接口解决了java中的多继承 |
一个子类只能继承一个抽象类 | 一个子类可以实现多个接口 |
一个抽象类可以实现多个接口 | 接口不可以继承抽象类, 但可以使用extends扩展多个接口 |
抽象类和接口之间相同点:
- 抽象类和接口均不可以实例化
- 当一个类继承了抽象类或者实现了接口的时候, 都需要重写里面的抽象方法
3. 重写和重载的区别
重写(Override) | 重载(Overlode) |
---|
方法名相同 | 方法名相同 |
返回值相同 | 返回值不做要求 |
参数列表相同 | 参数列表不同(参数的个数 / 参数的类型) |
前提: 在不同类中, 且具有继承关系 | 前提: 在同一类中 |
4. String, StringBuilder, StringBuffer的区别
- String 的拼接会产生大量的临时对象, StringBuilder 和 StringBuffer 不会
- String 的拼接会被优化成为 StringBuilder 或 StringBuffer 的 append() 方法
- StringBuilder 或 StringBuffer 之中有的方法是 String 所不具备的, 例如: reverse(逆置)
- StringBulider 和 String 一般用于单线程的情况
- StringBuffer(线程安全) 一般用于多线程的情况
5. 数组和链表的区别
数组和链表最大的区别就在于数据的访问和数据的增删上
数组 | 链表 |
---|
支持随机访问 | 不能随机访问 |
增加或删除元素时会移动大量的元素 | 随时随地进行增加或者删除, 不用移动元素 |