1、继承的概念及意义
面向对象
1)、封装 private+get/set+构造方法
2)、继承 extends
1)、提高代码的复用性
2)、多态的前提
3)、多态
1)、多个类有相同的成员
2)、定义一个新的类 ,只定义相同的成员
3)、其他类继承(extends)这个类
4)、自己也可以定义自己特有的成员
2、继承的格式及特点
格式
public class 父类{
//只能定义子类中相同的成员
}
public class 子类 extends 父类{
//自动拥有父类中的非私有成员,直接可以使用
//必须要有自己特有的成员
}
父类:基类、超类
子类:派生类
子类可以直接访问父类中的非私有的属性和行为
3、继承后的特点-成员变量
1)、子类父类,成员变量不重名,没有影响
2)、子类父类,成员变量重名,就近原则
就近原则:先找子类的成员,有就直接使用,没有再去父类找
开发中要避免成员变量重名
4、继承后的特点-成员方法
子类父类中,成员方法重名,就近原则
开发中,成员方法会重名大量使用,重写
5、方法重写
重载overload
一个类中,多个方法名相同的方法,参数列表不同
1)、类型不同
2)、个数不同
3)、顺序不同
非常常用
重写override
1)、变量没有重写一说
2)、继承关系中,父类定义一个与父类一模一样的方法
1-方法名一样
2-返回值类型必须一样
3-参数列表必须一样
3)、子类可以修改方法体
子类可以通过重写父类方法来修改方法体,对该方法进行拓展
6、方法重写的注意事项
1)、一模一样的
1-方法名一样
2-返回值类型必须一样
3-参数列表必须一样
重写又叫覆盖
权限(子类重写权限必须大于父类中方法的权限):
public>protected>默认(留空)>private
2)、在开发中,使用注解@Override放在方法,让javac编译器,检测重写是否成功
3)、在开发中,使用alt+Ins菜单,选重写
7、继承后的特点-构造方法
1)、private的成员跟继承无关
2)、构造方法跟继承无关
8、继承后的特点-内存
1)、子类对象创建
1-先创建父类部分 - 执行父类的构造方法
2-再创建子类对象 - 执行子类的构造方法
3子类对象包含了
9、this和super关键字
this 指向子类对象空间的引用
super 指向父类对象空间的引用
使用this和super区分子类与父类重名的变量和方法
使用格式:
this.成员变量名
super.成员变量名
**只能在子类方法中使用**
super.成员方法名()//执行父类中的方法
this.成员方法名()//执行子类中的方法
10、this()与super()
this() 表示执行子类的构造方法
super() 表示执行父类的构造方法
如果有参数,必须传参
只能在子类构造方法的第一行使用
在子类构造方法中只能调用super()或this()
11、单继承
一个子类只能继承一个父类(单继承)
为了调用安全
一个父类可以有多个子类,但一个子类只能有一个父类
12、多层继承
一个子类只能有一个父类,这个父类也可以有父类
产生继承体系
13、抽象类-概念
如果父类中的方法,所有子类都要重写,没有意义
那就要将这个方法写成抽象方法
有抽象方法的类就是抽象类
在开发中,表示强制的意思,为了统一命名
14、抽象类-定义格式及成员
abstrat 关键字,修饰
开发中抽象类的类名前面加Abs
public abstract class 类名{
//可以没有抽象方法
}
public abstract 返回值类型 方法名();
抽象方法必须在抽象类中
抽象类中可以没有抽象方法
public class 子类 extends 抽象类{
//必须重写抽象类中的抽象方法,否则必须也是抽象类;
}
15、抽象类-注意事项
1)、抽象类不能直接创建对象
2)、抽象类就是让子类继续重写的
复习
[ ] 能够解释类名作为参数和返回值类型
[ ] 能够写出类的继承格式
public class fu{} public class zi extends fu{}
[ ] 能够说出继承的特点
子类继承父类,可以直接访问父类中所有的非私有成员变量和成员方法
[ ] 能够说出子类调用父类的成员特点
[ ] 能够说出方法重写的概念
子类中重写父类的方法,方法的返回值,方法名,参数必须一致,子类对该方法体中的内容可以进行扩展,实现重写
[ ] 能够说出super可以解决的问题
super可以解决子类和父类中变量重名,方法名重名的问题。不使用super时,会遵从就近原则直接调用子类的成员变量和成员方法
[ ] 描述抽象方法的概念
子类都要重写且没有方法体的方法,被abstract所修饰
[ ] 写出抽象类的格式
public abstract class 类名{}
[ ] 写出抽象方法的格式
public abstract 返回值类型 方法名(参数){}
[ ] 能够说出父类抽象方法的存在意义
父类中的抽象方法,子类必须重写,对所有子类都有的方法做出统一的要求
[ ] 能够完成发红包案例的代码逻辑