继承性
继承的好处:
减少代码的沉余,提高代码的复用性
提高了代码的扩展
为了之后多态性的使用
继承的格式:
子类继承父类后的不同:
一旦子类A继承父类B之后,子类A中就获取了父类B中声明的所有的属性和方法。父类中声明为private的属性或方法,子类继承父类后仍认为获取了父类中私有 的结构。只因为封装性的影响,使得子类不能直接调用父类的结构而已
子类继承父类以后,还可以声明自己特有的属性或方法,实现功能的扩展。
*子类和 父类的关系不同于集和集合的关系
*extends:延展、扩展
Java中继承性的说明
1.一个类可以被多个类继承
2.Java中类的单继承性:一个类只能以有一个父类
3.子父类是相对概念
4.子类直接继承的父类称为直接父类,间继承的父类称为间接父类
5.子类继承父类以后,就获取了直接父类以及所有间接父类中声明的属性和方法
java.lang.Object类的理解
1.如果我们没有声明一个类的父类的话,则此类继承java.lang.Object类
2.所有的java类(除java.lang,Object类之外都直接或间接继承于java.lang,Object类)
3.意味着,所有的java类具java.lang,Object类声明的功能
方法的重写(override/overwrite)
重写:子类继承父类以后,可以对父类中同名同参数的方法进行覆盖操作
应用:重写以后,当创建子类对象以后,通过子类对象调用父类中同名同参数的方法时,实际执行的是子类重写父类的方法
重写的规定:
子类重写的方法名和形参列表与父类被重写的方法名和形参列表相同
子类重写的方法的权限修饰符不小于父类被重写的方法的权限修饰符
>特殊请况:子类不能重写父类中声明为prviate权限的方法
返回值类型:
>父类被重写的方法的类型是void,则子类重写的方法的返回值类型只能是void
>父类被重写的返回值类型是A类型,则子类重写的方法的返回值类型可以说A类或A类的子类
>父类被重写的方法的返回值类型是基本数据类型,则子类重写的方法的返回值类型必须是相同的基本数据类型
>子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型
子类和父类的同名同参数的方法要么都声明为非static的(考虑重写),要么都声明为static的(不重写)
super关键字
可用来调用的结构:属性、方法、构造器
super调用属性、方法:
我们可以在子类的方法或构造器中,通过使用"super.属性"或"super.方法"的方法的方式,显式调用父类中声明的属性和方法。但是,通常情况下,我们习惯省略"super"
特殊情况:当子类和父类中定义了同名的属性时,我们我们想要在子类中调用父类声明的属性,则必须显示的使用"super.属性"的方式,表明调用的是父类中声明的属性
特殊情况:当子类重写了父类中的方法以后,我们想在子类的方法中调用父类中被重写的方法时,则必须显示的使用"super.方法"的方式,表明调用的是父类中被重写的方法
super调用构造器:
我们可以在子类的构造器中显示使用"super(形参列表)"的方式,调用父类中声明的指定的构造器
"super(形参列表)"的使用,必需声明在子类构造器的首行
我们在类的构造器中,针对于"this(形参列表)"或"super(形参列表)"只能二选一 ,不能同时出现
在构造器的首行,没有显式的声明"this(形参列表)"或"super(形参列表)"则默认 调用的是父类中空参的构造器:super();
在类的多个构造器中,至少一个类的构造器中使用了"super(形参列表)",调用父类中的构造器
子类对象实例化的全过程
1.从结果上来看:(继承)
子类继承父类以后,就获取了父类中声明的属性或方法
创建子类的对象,在堆空间中,就会加载所有父类中声明的属性
多态性
理解多态性:可以理解为一个事物的多种形态
何为多态性:对象的多态性-父类引用指向子类的对象(或子类的对象赋给父类的引用)
person p = new man();
多态的使用,虚拟方法的调用:
有了对象的多态性以后,我们在编译期间,只能调用父类中声明的方法,但在运行期间,我们实际执行的是子类重写父类的方法
总结:编译看左边,运行看右边
多态性使用的前提:1.类的继承关系 2.方法的重写