继承性
- 减少代码的冗余,提高了代码的复用性
- 便于功能的拓展
- 为之后多态性的使用,提供了前提
继承性的格式
class A extends B{}
A:子类 派生类 subcalss
B:父类 超类 superclass
体现: 一旦子类A继承父类B 子类A中就获取了父类B中声明的结构 ,属性,方法
方法的重写
-
重写: 子类继承父类以后,可以对父类中同名同参的方法,进行覆盖操作
-
应用: 重写以后 当创建子类对象的时候,通过子类对象调用子父类中的同名同参的方法的时候,实际执行的是子类重写父类的方法
-
重写的规定:
-
方法的声明:权限修饰符 返回值类型 方法名(形参列表){
//方法体
}
约定俗称:子类中叫重写的方法,父类中叫被重写的方法
-
子类重写的方法的方法名,和形参列表 与父类被重写的方法名 方法形参相同
-
子类重写方法的权限修饰符不能小于父类的被重写的权限修饰符
-
特殊情况 ,子类不能重写父类声明为private的方法
-
返回值类型:父类被重写的方法的返回值类型是void,则子类重写的方法的返回值类型只能是void
- 父类被重写的方法的返回值类型是A类型,则子类的重写的方法的返回值类型可以是A类或者A类的子类
- 父类被重写的方法的返回值类型是基本数据类型,则子类的重写的方法的返回值类型也必须和父类被从重写的方法返回值一致
- 子类重写的方法抛出的类型的异常大小不能大于父类被重写的方法抛出的异常类型
-
子类和父类中的同名同参数的方法要么都声明为非static的(考虑重写),要么都声明为static的(不是重写)
super关键字的使用
- super可以理解为父类
- super可以用来调用父类的:属性,方法,构造器
- super的使用:
- 我们可以在子类的方法或构造器中,通过使用“super.属性"或”super.方法“的方式,显式的调用父类中声明的属性或者方法,但是通常情况下,我们习惯省略”super"
- **特殊情况:**当子类和父类中定义了同名的属性时,我们要想在子类中调用父类中声明的属性,则必须显式的使用“super.属性"的方式,表明调用的是父类中声明的属性
- 特殊情况:当子类重写了父类中的方法以后,我们想要在子类的方法中调用父类中被重写的方法是,则必须显式的使用”super.方法"的方式,表明调用的是父类中被重写的方法
- super调用构造器
- 我们在子类的构造器中显式的使用“super(形参列表)”的方式,调用父类中声明的指定的构造器
- “super(形参列表)”的使用必须声明在子类构造器的首行
- 我们在类的构造器中,针对与this(形参列表) 或“super(形参列表)”只能二选一
- 当我们在构造器的首行没有显式的声明this(形参列表) 或“super(形参列表)” 则默认调用的是父类构造器中的无参构造 “super()”;
- 在类的多个构造器中,至少有一个类的构造器中使用了“super(形参列表)"调用父类中的构造器
子类对象实例化的过程
-
从结果上来看:(继承性)
子类继承父类以后,就获取了父类中声明的属性或方法
-
从过程上来看:
当我们通过子类的构造器创建子类对象时,我们一定会直接或者间接的调用其父类的构造器,进而调用父类的父类的构造器,直到调用了java.lang.Object类中空参的构造器为止,正因为加载过所有父类的结构,所有才可以看到内存中有父类中的结构,子类对象才可以考虑进行调用
明确:虽然创建子类对象时,调用了父类的构造器,但是至始至终就创建过一个对象,即为new的子类对象