1.面向对象的特征——继承(掌握)
● 继承(extends)介绍
子类继承父类,继承父类非私有的方法和属性。
子类继承父类使用extends关键字;
● 案例演示
案例1:猫科动物类(Animal),猫类(Cat),老虎(Tiger),豹子()
定义两个属性(颜色,腿的个数),两个功能(吃饭,睡觉)
案例2:需求:分别书写iphone4、5、6、7、X(人脸解锁,全屏技术)的特征和功能;
使用继承前:
使用继承后:
● 思考
构造方法能不能被继承?
不能。
2.继承的好处和弊端(掌握)
● 继承的好处
- 提高了代码的复用性
- 提高了代码的维护性
- 让类与类之间产生了关系,是多态的前提
● 继承的弊端
类的耦合性增强了。开发的原则:高内聚,低耦合。
耦合:类与类的关系
内聚:就是自己完成某件事情的能力
3.Java中类的继承特点(掌握)
● Java中类的继承特点 - Java只支持单继承,不支持多继承。(一个儿子只能有一个亲爹)
- Java支持多层继承(继承体系)子继承父,父继承爷,爷继承祖…
● 继承看点:
如果想用这个体系的所有功能用最小的子类创建对象;
如果想看这个体系的共性功能,看最大的父类;
4.继承的注意事项和使用(掌握)
● 继承的注意事项
1、子类只能继承父类所有非私有的成员(成员方法和成员变量)
2、子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法。
3、不要为了部分功能而去继承 比如:猫有腿,动物不一定有腿;
● 什么时候使用继承?
如果多个类有共性,就可以使用继承关系把共性提出来放到父类中,子类只需要继承即可;比如:name,sex
5.继承中成员变量的关系(掌握)
● 案例演示
案例1:不同名的变量
案例2:同名的变量
调用的子类的变量。 - super关键字
● 概述super
表示当前对象父类的引用;
● super的使用
super可以调用父类的非私有属性和方法;
super可以调用父类的构造方法
7.this和super的区别和应用(掌握)
● this和super的使用区别
调用成员变量
this.成员变量 调用本类的成员变量,也可以调用父类的成员变量(当子类中没有该属性的时候)
super.成员变量 调用父类的成员变量
调用构造方法
this(…) 调用本类的构造方法
super(…)调用父类的构造方法
调用成员方法
this.成员方法 调用本类的成员方法,也可以调用父类的方法
super.成员方法 调用父类的成员方法
● 注意:
this或者super在调用构造方法的时候,必须放到第一行代码,并且只能出现一个super或者一个this。
super只能调用父类成员,this即可以调用子类成员也可以调用父类成员。
参考图解
8.继承中构造方法的关系(掌握)
● 案例演示
子类中所有的构造方法默认都会访问父类中空参数的构造方法;
为什么呢?
因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化。
子类在加载到内存中时候,父类一定比子类先加载?对的
其实:每一个构造方法的第一条语句默认都是:super();
Object类是最顶层的父类。
● 思考
Zi zi = new Zi();其中Zi类有其父类Fu,问这行代码jvm都干了那些事?
9.继承中构造方法的注意事项(掌握)
● 案例演示
父类没有无参构造方法,子类怎么办?
super解决
this解决
最终结果只需要调用了父类的构造方法就可以了。
10. 继承中的面试题(掌握)
案例演示
看程序写结果1
class Fu{
public int num = 10;
public Fu(){
System.out.println("fu");
}
}
class Zi extends Fu{
public int num = 20;
public Zi(){
System.out.println("zi");
}
public void show(){
int num = 30;
System.out.println(num);
System.out.println(this.num);
System.out.println(super.num);
}
}
class Test1_Extends {
public static void main(String[] args) {
Zi z = new Zi();
z.show();
}
}
看程序写结果2
class Fu {
static {
System.out.println("静态代码块Fu");
}
{
System.out.println("构造代码块Fu");
}
public Fu() {
System.out.println("构造方法Fu");
}
}
class Zi extends Fu {
static {
System.out.println("静态代码块Zi");
}
{
System.out.println("构造代码块Zi");
}
public Zi() {
System.out.println("构造方法Zi");
}
}
Zi z = new Zi(); 请执行结果。
看程序结果3
class Fu {
static {
System.out.println("父类静态代码块");
}
{
System.out.println("父类构造代码块");
}
public Fu() {
System.out.println("父类构造方法1");
}
public Fu(int age) {
this();
System.out.println("父类构造方法2");
}
}
class Zi extends Fu{
static {
System.out.println("子类静态代码块");
}
{
System.out.println("子类构造代码块");
}
public Zi() {
System.out.println("子类构造方法1");
}
public Zi(int age) {
this();
System.out.println("子类构造方法2");
}
}
Zi zi = new Zi(10);//执行结果?
11.继承中成员方法关系(掌握)
● 案例演示
案例1:不同名的方法
案例2:同名的方法
默认情况调用的是子类的方法;
12.方法重写概述及其应用(掌握)
● 什么是方法重写
子父类出现了一模一样的方法(多态的一种表现)跟方法的返回类型有关;
● 方法重写的应用
当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法。这样,即沿袭了父类的功能,又定义了子类特有的内容。
需要使用super调用父类方法。
● 案例演示
定义一个手机类。
13.方法重写的注意事项(掌握)
● Overload(重载)能改变返回值类型吗?Override(重写)?
overLoad跟返回值类型无关。Override跟返回值类型有关。
● 方法重写注意事项
- 父类中私有方法不能被重写
因为父类私有方法子类根本就无法继承,如果子类一定要写一个方法名一样的方法那么该方法只具有子类的特性,不能具备父类的特性。 - 子类重写父类方法时,访问权限不能更低
最好就一致 - 静态方法没有重写
因为静态方法不需要重写就可以直接通过类名调用。
4. 子类重写父类方法的时候,最好声明一模一样。
构造方法也没有重写?没有。因为构造方法不能继承。
● 案例演示
14. Override(重写)和Overload(重载)的区(掌握)
● 区别
方法重写:子类中出现了和父类中方法声明一模一样的方法。与返回值类型有关,返回类型是一致;
方法重载:本类中出现的方法名一样,参数列表不同的方法。与返回值类型无关。
提示:
子类对象调用方法的时候:先找子类本身,再找父类。
小提示:使用快捷键Ctrl+O : 快速查找方法;Ctril+F: 快速查找;
15.继承案例练习(掌握)
● 案例1
使用继承前的学生和老师案例
属性:姓名,年龄
行为:吃饭
老师有特有的方法:讲课
学生有特有的方法:学习
使用继承后的学生和老师案例
● 案例2
猫狗案例继承版
属性:毛的颜色,腿的个数
行为:吃饭
猫特有行为:抓老鼠catchMouse
狗特有行为:看家lookHome
总结
英文单词:
double、long、char、int、true、false、public、protected、private、String、while、void、this、super、for、if、else、switch、
case、default、break、continue、return、extends、boolean、Override、OverLoad、class、do、final、float、short、byte、static、
NullPointerException、ArrayIndexOutOfBoundsException、package、equals、method、new、array、Object
快捷键:
Ctrl+C: 复制
Ctrl+V: 粘贴
Ctrl+S: 保存
Ctrl+x: 剪切
Ctrl+F:在本文件中查找内容
Ctrl+O:在本类中查找方法
Ctrl+Z : 撤销
Ctrl+A:全选
Ctrl+D :删除多行代码
Ctrl+/ : 注释
Ctrl+F11:运行代码
Ctrl+L :跳行
Shift+↑↓:快速选中多行
Ctrl+Shift+/: 注视多行
Shift+Alt+M: 把多行代码自动生成方法的
Shift+Alt+S :添加toString、Constructor、Set和Get方法
Shift+Alt+R:重命名
Shift+Enter:快速换行
Alt+/ : 代码自动提示
Ctrl+Alt+↓:复制多行代码
Ctrl+Shift+F:格式化代码
Alt+左箭头/右箭头:上一步,下一步