一.重写和重载的区别
1.重载:JAVA中允许同一个文件中出现多个方法名相同但是参数列表不同的同名方法,这种现象称为重载
- 要求两个方法名称必须相同,但是参数列表不能相同(个数不同,参数类型不同,参数类型出现顺序不同)
目的是让方法接收不同参数时实现不同功能
2.重写:发生在继承过程中,子类对父类实现细节进行重新定义 - 重写方法时,子类不能降低方法访问权限,可以扩大访问权限
- 由private或者final修饰的方法可以被继承但不能被重写
- 重写方法时,抛出异常可以是父类方法抛出异常的全集,子集或空集(异常只能少不能多)
- 重写方法返回值,可以缩小范围范围,但不能增加返回值范围
重载与重写是 Java 多态性的不同表现。
重写是父类与子类之间多态性的表现,在运行时起作用(动态多态性,譬如实现动态绑定)
而重载是一个类中多态性的表现,在编译时起作用(静态多态性,譬如实现静态绑定)。
二.throw和throws的区别
1.throws:
- 声明位置:方法名之后
public void test1()throws NullPointerExeption{
} - 作用:通知开发人员当前方法运行时,有可能抛出的异常
- 携带数据:throws后面携带异常类型,一个throws后面可以携带多个异常类型
- 调用:当一个方法被throws修饰时,调用方法时必须考虑异常捕捉问题
2.throw: - 声明位置:方法执行体
public void test1(){
throw new RunTimeException;
} - 作用:throw时一个命令,执行时抛出一个指定异常对象
- 携带数据:throw后面携带异常对象,一个throw一次只能携带一个异常对象
- 调用:当一个方法内部存在throw命令时,在调用时可以不考虑异常捕捉问题
三.接口和抽象类的区别
1.接口:
- 是一种特殊类文件
- 作用:制定规则,降低耦合度
- 使用规则:接口中属性,默认都是静态常量属性
接口中的方法都是抽象方法(没有方法体),如果需要定义具体方法实现,此时方法需要使用default修饰
接口中方法的访问权限不能是private
接口与接口之间可以实现多继承,但是接口之间不能相互实现
接口中不存在构造方法
2.抽象类: - 抽象类由abstract修饰
- 抽象类作用降低接口实现类与接口之间实现难度(假设有一个接口有两种抽象方法,接口实现类只想要重写其中一个方法,可以建立一个抽象类实现接口另一个方法,再由接口实现类继承抽象类,这样接口实现类只需要重写其中一个方法)
-使用规则:抽象类可以声明抽象方法,也可以声明具体方法
抽象类声明抽象方法必须由子类进行重写
抽象类实现接口时,不需要对接口方法进行重写
抽象类中有构造方法,但不能使用