本篇文章解决问题
1. 重写
2. super关键字
1. 重写
1.1 什么是重写
子类继承父类后,可以对父类中同名同参数的方法,进行覆盖操作。
1.2 重写的应用
重写以后,当创建子类对象后,通过子类对象调用子父类中的同名同参数的方法时,实际执行的是子类重写父类的方法。
1.3 重写的举例
class Circle{
public double findArea(){}// 求面积
}
class Cylinder extends Circle{
public double findArea(){}// 求表面积
}
1.4 重写的规则
方法的声明:
权限修饰符 返回值类型 方法名(形参列表) throws 异常的类型{
//方法体
}
约定俗成:子类中的叫重写方法,父类中的叫被重写的方法。
规则:
- 子类重写的方法的方法名和形参列表与父类被重写的方法的方法名和形参列表相同。
- 子类重写的方法的权限修饰符要不小于父类被重写的方法的权限修饰符,特殊情况:子类不能重写父类中声明为private权限的方法。
- 返回值类型:
- 父类被重写的方法返回值类型是void,则子类重写的方法的返回值类型只能是void。
- 父类被重写的方法返回值类型是A,则子类重写的方法的返回值类型可以是A类或A类的子类。
- 父类被重写的方法返回值类型是基本数据类型(如,double),则子类重写的方法的返回值类型必须是相同的基本数据类型(必须是double)。
- 子类重写方法抛出的异常类型,不大于父类被重写的方法抛出的异常类型。
2. super关键字
2.1 super的理解
super可以理解为父类的
2.2 可以用来调用的结构
可以调用属性、方法、构造器
2.3 super调用属性、方法
- 可以在子类的方法或构造器中,通过使用“super.属性”或“super.方法”的方式,显式的调用父类中声明的属性或方法。但是通常情况下,我们习惯省略“super.”。
- 特殊情况,当子类和父类中定义了同名的属性时,我们想要在子类中调用父类中声明的属性,则必须显式的使用“super.属性”的方式,表明调用的是父类中的声明的属性。
- 特殊情况,当子类重写了父类中的方法以后,我们想在子类的方法中调用父类被重写的方法时,则必须显式的使用“super.”的方式,表明调用的是父类中被重写的方法。
2.4 super调用构造器
- 我们可以在子类的构造器中显式的使用“super(形参列表)”的方式,调用父类中声明的指定的构造器。
- “super(形参列表)”的使用,必须声明在子类构造器的首行。
- 在类的构造器中,针对于“this(形参列表)”或“super(形参列表)”,只能二选一,不能同时出现。
- 在构造器的首行,,没显式的声明“this(形参列表)”或“super(形参列表)”,则默认调用的是父类中空参的构造器:super()。
- 在类的多个构造器中,至少一个类的构造器中使用了“super(形参列表)”,调用父类中的构造器。