重写与重载
重载:
重载定义:Java中允许一个类文件中出现多个方法名相同,但是参数列表不同的同名方法。
要求:方法名相同,形参列表不同。(个数不同,类型不同,顺序不同)
目的:让方法在接收不同参数的时候实现不同功能。
重写:
重新定义:发生在继承的过程中,子类对父类方法的实现细节进行重新定义。
重写规则: 1、不能降低访问权限,只能扩大访问权限。例如父类是protected修饰符,子类不能private ,但可以public
2、有private和final修饰的方法不能被重写。
3、重写方法的时候,抛出异常只能是父类抛出异常相同或更广泛
4、重写方法返回值类型可以是父类返回值类型的子类型。
即可以缩小返回值类型的范围,但不能扩大。父类返回father,子类返回son(son继承father)
throw和throws
throws:
声明位置:方法名之后。例如public void test1() throws NullPointerExeption{…}
作用:通知开发人员当前方法运行时,有可能抛出的异常。
携带数据:后面携带的是异常类型,一个throws后面可携带多个异常类型。
调用:当一个方法被throws修饰时,调用方法必须考虑异常捕捉。
throw:
声明位置:方法的执行体。例如public void test1(){ … ; throw new RuntimeExweption(); …}
作用:是一个命令。执行时抛出一个指定的异常对象
携带数据:携带异常对象,一个throw只能携带一个异常对象
调用:当一个方法内部有throw命令时,在调用时可以不考虑异常捕捉。
抽象类和接口
接口
定义:由interface修饰,是一种特殊的文件
作用:指定规则,降低耦合度。
规则: 接口中的属性都是静态常量属性
接口中的方法都是抽象方法,如果需要定义具体的方法实现,需要default修饰
接口中方法的访问权限不能是private
接口与接口之间可以实现多继承
接口无构造方法
抽象类
定义:由abstract修饰
作用:降低接口实现类与接口之间的实现难度。用接口的话,就一定要实现接口里所有方法,增加难度。(重要)
可以用抽象类实现接口,具体使用的类继承此抽象类。
(注:抽象类实现接口,可以不对接口中的方法进行重写,抽象类未重写的方法,必须由抽象类的子类负责实现。)
使用规则: 抽象类既可声明抽象方法,又可声明具体方法
抽象类声明抽象方法必须由子类进行重写
抽象类实现接口时,无需对接口里的方法进行重写
抽象类有构造方法。(只是摆设,因为不能创建实例)