抽象类
1. 不能实例化
2. 定义标准,可以有抽象方法,强制子类按抽象类的抽象方法的标准去重写
3. 父类指向子类对象,实现多态
4. 其他和普通类一样
接口
1.接口可以理解为一个特殊的抽象类,但是可以有类多实现接口和接口之间多继承
2.interface 接口,不是类,所以没有继承自Object,所有类都默认继承Object
3.接口不是类,所以没有构造器
4.接口中不能有普通属性
5.接口中不能有普通方法,JDK1.8后有默认方法。
6.接口的静态常量和抽象方法都是public的,且不允许修改
7.实现接口使用 implements 关键字
两者的区别
- 抽象类单继承,接口多实现,多继承。
- 抽象类可以有属性和常量,接口只能有常量。
- 抽象类有构造器,接口没有构造器
什么时候使用抽象类,什么时候使用接口
角度1:如果要实现多个扩展功能我们考虑使用接口,因为可以多实现。如果只是复用属性和方法, 角度2:现在更多的推荐是面向接口编程,所以,一般没有什么特殊场景,我都会使用接口,因为增强了 程序的扩展性和可维护性。继承一般是要满足is a的关系。 但是实现接口不需要,一般符合like a即可。 所以开发中更多是会采用继承加实现的方式。继承一般使用一个顶级的父类,复用子类的共同属性和行 为。功能性的一般都使用接口来实现。
异常
- 讲讲你开发过程中,碰到的常见异常?
NullPointException 空指针
IndexOutOfBoundsException 数组越界
ArithmeticException 算数异常
NumberFormatException 数值格式化异常,把不能转成数字的数据去转成数字
ClassCaseException 类型转换异常
SQLException SQL语法错了,数据库驱动,数据库密码。。
IOException 输入输出流,读写文件的时候,参数不对
- 谈谈你对Java中异常的理解
Java中的异常是 Exception 类,它继承自 Throwable 这个基类,同时该基类还有一个 Error 错误子类 Exception 是异常,它又分为检查性异常和运行时异常
检查性异常必须在 编译期间 要求程序去处理,处理的方式可以是 throws 声明抛出,或者使用try-catch 捕获处理.
运行时异常不强制程序在编译器处理,可自行选择是否处理,处理方式和上述一样。
Error 是错误,它代表程序在执行的时候遇见一些不可控的非常规的问题,一般程序本身无法解决。比如: 内存溢出 , 网络问题
throw 真正报一个异常
throws 是声明异常,告诉调用方,我可能会报这个异常。 如果声明的是一个检查性异常用方必须处理;如果是运行时异常,调用方可自行选择是否处理。
catch要类型匹配或父类异常才能捕获对应的异常