2020/6/6 记录
今日学习内容:方法的重写与super
重写(override/overwrite):
定义:在子类中可以根据需要对从父类中继承来的方法进行改造,也称为方法的重置、覆盖。在程序执行时,子类的方法将覆盖父类的方法。
要求:
-
子类重写的方法必须和父类被重写的方法具有相同的方法名称、参数列表
-
子类重写的方法的返回值类型不能大于父类被重写的方法的返回值类型
-
子类重写的方法使用的访问权限不能小于父类被重写的方法的访问权限(子类不能重写类中声明为private权限的方法)
-
子类方法抛出的异常不能大于父类被重写方法的异常
• 注意:子类与父类中同名同参数的方法必须同时声明为非static的(即为重写),
• 或者同时声明为static的(不是重写)。因为static方法是属于类的,子类无法覆盖父类的方法。
约定俗成:子类中的叫重写的方法,父类中的叫被重写的方法
返回值类型:
- 父类被重写的方法的返回值类型是void,则子类重写的方法的返回值类型只能是void
- 父类被重写的方法的返回值类型是A类型,则子类重写的方法的返回值类型可以是A类或A类的子类
- 父类被重写的方法的返回值类型是基本数据类型(比如: double), 则子类重写的方法的返回值类型必须是相互
注意:子类和父类中的同名同参的方法要么都声明为非static的(考虑是重写),要么都声明为static的(不是重写)
问:方法的重载和重写的区别是什么。
这是一条分割线,怎么不够长呢,非我要加上这些字吗,啊我好气啊,学习JAVA真开心
super关键字的使用:
-
super理解为:父类的…
-
super可以用来调用:属性、方法、构造器
-
super的使用:调用属性和方法
3.1 我们可以在子类的方法或者构造器中通过使用"super.属性"或"super.方法"的方法,显式的调用父类中的声明的属性或方法。但是通常情况下我们都省略了"super."3.2 特殊情况:当子类和父类中定义了同名的属性,我们要在子类中调用父类中声明的属性,则必须显式的使用"super.属性"的方式,表明调用的是父类中声明的属性。
3.3 特殊情况:当子类重写了父类中的方法以后,我们想在子类的方法中调用父类中被重写的方法时,必须显式的使用"super.方法"的方式,表明调用的是父类中被重写的方法
-
super调用构造器
4.1 我们可以在子类的构造器中显式的使用"super(形参列表)"的方法,调用父类中声明的指定的构造器4.2 "super(形参列表)"的使用,必须声明在子类构造器的首行!
4.3 我们在类的构造器中,针对于 “this(形参列表)” 或 “super(形参列表)” 只能二选一,不能同时出现
4.4 当在构造器的首行,没有显式的声明 “this(形参列表)” 或 “super(形参列表)” ,则默认调用父类中的空参的构造器:super()
4.5 在类的多个构造器中,至少有一个类的构造器中使用了"super(形参列表)",调用了父类中的构造器