Java中的重写和重载,方法签名,还要this和super
文章目录
this和super的区别
1.this:
- this()
- 如果里面没有参数就是调用当前类的无参构造器
- 如果里面有参数就是调用当前类的有参构造器
- 这个只能放在调用的第一行,this()和super()不能同时出现在一个调用的方法里面
- this.
- this.是用来区分和属性同名的变量的,当没有和属性同名的变量是this.可以默认不写,默认不写是指系统会自动相当于添加this.注意:默认不写的只有this.,super不能,只要要用super.就要写,不用就不用写。
2.super:
-
super.
- super是用来区分子类和父类有同名变量和方法的 -
super()
-
如果里面没有就是指调用当前类的父类的无参构造器
-
如果里面有参数就是指调用当前类的父类的有参构造器
-
这个只能放在调用的第一行,this()和super()不能同时出现在一个调用的方法里面,如果不写,无参的super()会自动写在方法调用的没有this()的首行,因为当有this()的时候,就是调用了当前类的构造器,那么super()无参构造器就会默认写在this()调用的构造器的首行。
注意:
如果当前类有父类,那么当前类在new对象的时候,一定会先调用super()调用父类的构造器,因为没有父类就没有子类。
-
空指针,可以转换成任意的引用类型,不过像对象,如果是空指针,在获取属性就会报空指针异常
方法的重写和重载的区别
1.重载:
重载有两同三不同,他是在同一个类里面,共用一个方法名,但实现的功能不一样
1.1两同(必须全满足)
- 方法名相同
- 在同一个类
1.2三不同(满足一个就行)
- 参数类型不同
- 参数个数不同
- 参数类型(不同的类型)顺序不同
2.重写:
重写是指,父类的方法不满足子类的需求,子类进行方法的重写,这样就不会使用父类的方法,程序是先找本来有没有,
没有然后再找父类。但这个并不是重新写一个方法。有下面的要求
- 返回类型相同
- 方法名相同
- 参数列表(参数类型,个数,顺序)相同
- 访问权限更低
- 声明为final的方法不能被重写
- 声明为static的方法不能被重写,但是能够被再次声明
- 构造方法不能被重写
- 子类和父类在同一个包中,那么子类可以重写父类所有除了声明为private和final 的方法
- 如果不能继承一个方法,则不能重写这个方法(即重写方法是要再继承的父类里面有的)
- 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常
- 重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性 异常,反之则可以
我们通常用注解@Orrivde来判断重写的方法是否正确。
方法签名
在这里顺便提一下方法签名,方法的签名,确保在一个类中的 唯一性 。方法的签名只看 方法名和形参( 类型 个数 和顺序) ,与修饰符
返回类型 和形参名无关。
在一个类中,方法签名必须要唯一, 和变量相同,在同一个作用域中变量名要唯一
在一个类中,其实方法的调用就是通过方法签名来确定方法的。