大家好,又见面了,我是你们的朋友全栈君。
一:继承的概述
1.继承的定义
继承:就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。
–注:父类又称为超类或者基类。子类又称为派生类!
2.继承的格式
通过 extends 关键字,可以声明一个子类继承另外一个父类,定义格式如下:
class 父类 {
…
}
class 子类 extends 父类 {
…
}
二、关于继承之后的成员变量
1.当成员变量不重名
如果子类父类中出现不重名的成员变量,这时的访问是没有影响的。
–注:Java只支持单继承,不支持多继承,也就是说一个类只能有一个父类,不可以有多个父类
2.成员变量重名
如果子类父类中出现重名的成员变量,这时的访问是有影响的。
如果在子类中出现了同名称的成员变量,则会发生隐藏现象,即子类的成员变量会屏蔽掉父类的同名成员变量。
当子父类中出现了同名的成员变量时或者在子类中需要访问父类中非私有成员变量时,需要使用 super 关键字, 使用格式 super.父类成员变量名
3.当成员变量时非私有时:子类中可以直接访问。
4.当成员变量时私有:子类是不能直接访问的。
那如何访问父类私有变量呢?
在父类中提供公共的getXxx方法和setXxx方法就可以访问父类的私有成员变量了。
三:关于继承之后的成员方法
1.成员方法不重名
如果子类父类中出现不重名的成员方法,这时的调用是没有影响的。
对象调用方法时,会先在子类中查找有没有对应的方法,若子类中存在就会执行子类中的方法,若子类中不存在就会执行父类中相应的方法。
2.成员方法重名 【方法重写】
成员方法重名大体也可以分两种情况:
1、方法名相同返回值类型、参数列表却不相同(优先在子类查找,没找到就去父类)
2、方法名、返回值类型、参数列表都相同,就是重写(Override)
—注:重写:子类中出现与父类一模一样的方法时(返回值类型,方法名和参数列表都相同),会出现覆盖效果,也称为重写或者复写。声明不变,重新实现。
–注:隐藏和覆盖是不同的,隐藏是针对于成员变量和静态方法的,而覆盖是针对普通方法的。
最后重写必须注意这几点:
1、方法重写时, 方法名与形参列表必须一致。
2、子类方法覆盖父类方法时,必须要保证子类权限 >= 父类权限。
3、方法重写时,子类的返回值类型必须要 <= 父类的返回值类型。
4、方法重写时,子类抛出的异常类型要 <= 父类抛出的异常类型。
四:关于继承之后的构造方法
构造方法的名字是与类名一致的,所以子类是无法继承父类构造方法的。 构造方法的作用是初始化成员变量。所以子类的初始化过程中,必须先执行父类的初始化动作。子类的构造方法中默认会在第一句代码中添加super(),表示调用父类的构造方法,父类成员变量初始化后,才可以给子类使用。
super() 不写也默认存在,而且只能是在第一句代码中。
–重载:函数的方法参数个数或者类型不一致,称为方法的重载
从含义上说,只要求参数的个数或者参数的类型不一致就说两个函数式重载函数,而至于返回值是否一样,没关系。同时,重载可以发生在同一个类中也可以发生在继承关系中。
–重写(覆写):对一个方法的重写必须发生在具有继承关系的两个类中,即子类对父类方法的重写。
它要求两个方法的参数个数和类型以及返回值类型都必须一致,这样才称为方法重写。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/156464.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...