重载及覆写的区别
No. | 区别点 | 重载 | 覆写 |
1 | 定义 | 方法名称相同,参数的类型或个数不同 | 方法名称、参数的类型或个数、返回值相同 |
2 | 权限 | 没有权限要求 | 被覆写的方法不能拥有比父类更严格的权限 |
3 | 范围 | 发生在一个类之中 | 发生在继承关系中 |
4 | 单词 | OverLoading | Override |
this与super的区别
No. | 区别点 | this | super |
1 | 使用 | 调用本类中的属性或方法 | 从子类调用父类中的属性或方法 |
2 | 构造 | 可以调用本类构造,且有一个构造要作为出口 | 从子类调用父类的构造方法,不管子类如何安排最终一定会去调用,默认调用的是父类中的无参构造方法 |
3 | 要求 | 调用构造的时候一定要放在构造方法首行 | 放在子类构造方法首行 |
使用super和this调用构造方法的语句是不可能同时出现的 | |||
4 | 特殊 | 表示当前对象 | 无此概念 |
抽象类和接口的区别
接口和抽象类从使用上看非常的相似,那么下面通过以下的表格对两者进行区分:
No. | 比较 | 抽象类 | 接口 |
1 | 关键字 | 使用abstract class声明 | 使用interface声明 |
2 | 定义 | 包含一个抽象方法的类 | 抽象方法和全局常量的集合 |
3 | 组成 | 属性、方法、构造、常量、抽象方法 | 全局常量、抽象方法 |
4 | 权限 | 抽象方法的权限可以任意 | 只能是public权限 |
5 | 使用 | 通过extends关键字继承抽象类 | 通过implements关键字实现接口 |
6 | 局限 | 抽象类存在单继承局限 | 没有此局限,一个子类可以实现多个接口 |
7 | 顺序 | 一个子类只能先继承抽象类再实现多个接口 | |
8 | 设计模式 | 模板设计 | 工厂设计、代理设计 |
两者联合可以完成一个适配器设计 | |||
9 | 实际作用 | 只能做一个模板使用 | 作为标准、表示能力 |
10 | 使用 | 两者没有什么本质的区别,但是从实际上来看,如果一个程序中抽象类和接口都可以使用的话,则一定要优先考虑接口,因为接口可以避免单继承所带来的局限。 | |
11 | 实例化 | 都是依靠对象多态性,通过子类进行对象实例化的 |
ArrayList和Vector的区别
从代码的最终的操作形式上可以发现,代码的输出结果与之前是一样的,而且没有区别,但是两者的区别还在于其内部的组成上。
No. | 区别点 | ArrayList | Vector |
1 | 推出时间 | JDK 1.2之后 | JDK 1.0的时候推出 |
2 | 线程处理 | ArrayList采用异步处理 | 采用同步处理 |
3 | 性能 | 速度较快 | 速度相对较慢 |
4 | 安全性 | 非线程安全性的操作 | 属于线程安全的操作 |
5 | 输出 | 由于都是List接口的子类,所以都可以依靠size()和get()两个方法完成循环输出 | |
for、Iterator、ListIterator | for、Iterator、ListIterator、Enumeration |
HashMap与Hashtable的区别
HashMap和Hastable在使用上相似,那么两者的区别如下:
No. | 区别点 | HashMap | Hashtable |
1 | 推出时间 | JDK 1.2之后 | JDK 1.0的时候推出 |
2 | 线程处理 | 采用异步处理 | 采用同步处理 |
3 | 性能 | 速度较快 | 速度相对较慢 |
4 | 安全性 | 非线程安全性的操作 | 属于线程安全的操作 |
5 | 保存null | 允许key设置成null | 不允许设置,否则出现NullPointerException |