1.继承:
让类与类之间产生关系(父子类),子类可以直接访问父类中的非私有的成员(即成员没有被private修饰),在继承关系中父类更通用,子类更具体和特殊。
继承的使用条件:
当类与类之间存在相同(共性)的内容,并且产生了 is a(谁是谁)的关系,即有一定的逻辑关系
2.继承的格式:
class 子类名 extends 父类名{ }
父类:又称基类,超类
子类:又称派生类
一个类如果没有使用关键字extends,那么这个类默认继承object类
3.创建类的细节(不建议这样使用(即一个java类文件中存在多个类)):
1.一个Java文件中可以编写多个class,但要保证类与类之间是平级关系,
2.只能有一个类被public修饰,public修饰的类的类名称与文件名相同
可以在练习代码时为了方便(偷懒)可以这样用,但还是建议一个类文件中只创建一个类
4.继承中的成员访问特点:
- 成员变量:
this:调用本类成员(与super作比较)
super:调用父类成员
子类可以继承父类的非private修饰的变量
对于父亲的包访问权限成员变量,如果子类和父类在同一个包下,则子类能够继承,否则不能继承
子类可以继承父类的成员变量,但子类中定义了与父类同名的成员变量,则子类的成员变量会屏蔽父类的成员变量,如需访问父类的同名成员变量,则要通过super.成员变量 访问
this与super的异同比较:
this:代表本类对象的引用(地址)
super:代表父类存储空间的标识
this:
访问成员变量:(this.本类成员变量)
访问成员方法:(this.本类成员方法)
访问构造方法:访问本类构造方法 (this(); this(….))
super:
访问成员变量:(super.父类成员变量)
访问成员方法:(super.父类成员方法)
访问构造方法 :父类构造方法(super(); super(….))
super调用父类成员的省略规则:
被调用的成员方法和变量,在子类中不存在,可省略super.
this(),super()都争夺构造方法第一行位置,二者不可共存
this关键字的使用: 成员变量和局部变量出现重名时JAVA会根据就近原则进行使用,
作用:解决成员变量和局部变量之间重命名的问题
this可以调用本类的成员变量和成员方法
this的省略条件:
本类成员方法:this可以省略(即可写可不写)
本类成员变量:方法中没有出现与成员变量重命名的变量可以省略
- 成员方法:
子类可以继承父类的非private方法
对于父亲的包访问权限成员方法,如果子类和父类在同一个包下,则子类能够继承,否则不能继承
子类可以继承父类的成员方法,但子类中定义了与父类同名的成员方法,则子类的成员方法会屏蔽父类的成员方法,如需访问父类的同名成员方法,则要通过super.成员方法 访问
方法重载(overload):对于同一类中的多个方法,方法名相同,参数不同(类型不同,个数不同,顺序不同),与返回值无关,这被称为方法重载(与方法重写做个比较)
方法重写(override)也称为方法覆盖:子类中出现了与父类重名的方法(其实是对父类方法根据自身需求进行加工,使得方法符合自身逻辑)
判断重写方法的方法:
1.两同两小一大
两同:(方法名,参数列表一致)
两小:子类返回值类型比父类相同或小, 子类抛出异常小于等于父类方法抛出异常
一大:访问权限要大(子类与父类相同或高于父类)
2.注解:(IntelliJ IDEA Community Edition编译器中)在重写方法上面写@override,方法不报错就证明此方法是重写方法
使用方法重写的条件:
当子类需要父类的方法,但父类方法的逻辑不好,故在子类中对父类方法进行修改或增强
方法重写的技巧:(在IntelliJ IDEA Community Edition编译器中)
1.直接写所要重写的方法名,会有代码提示,点击直接生成
2.右击鼠标->选择生成->重写方法->选择父类中要进行重写的方法,自动生成
方法重写注意事项:
父类中私有方法不能被重写
子类的重写方法访问权限要大于等于父类(public(不同包的无关类)>protected(不同包的子类)->default(默认,同一包中)>private(同一个类中))
不同包的子类:两个包中的各一个类,并且两个类产生子父继承
不同包的无关类:任意包中的类可以互相访问
实际开发中(public,private)用的多,其他基本不用
- 构造方法:
构造方法(对象的初始化方法):(父类的构造方法不能被子类继承)
子类在初始化之前,父类要提前完成初始化,所以子类如何完成对父类的初始化?
答:在子类的构造方法中调用父类的构造方法进行初始化,子类特有的成员变量自己完成初始化(super()或者super(......))。
如果父类的构造方法都是有参的,则必须在子类的构造方法中显式地通过super关键字调用父类的构造方法并配以适当的参数列表。
如果父类有无参构造方法,则不必在子类的构造方法中调用super(),因为除了object类,在所有子类的构造方法的第一行代码,都默认隐藏了super()(即父类的空参构造方法),通过这句代码,访问父类的空参构造,完成父类初始化,这是系统自动调用执行的我们无需操行,只要提供父类的无参构造方法即可。
(生成子类构造方法的技巧:鼠标右击->选择生成->选择构造函数->选择构造函数的类型(空参还是有参))
java中的所有类(这里可理解为父类)都直接或者间接继承到了object类(object类是所有类的祖先)
5.继承的特点:
只支持单继承(一个类只能继承一个父类),不支持多继承(即一个类不能同时继承多个父类,一个儿子不能有多个爹,但一个类可以被多个类继承,即父亲可以有多个儿子),但支持多层继承(即父亲继承爷爷,儿子继承父亲,形成三代继承)