JavaSE进阶——Day01 继承、抽象类
JavaSE进阶——Day01 该篇主要讲解Java中的继承、抽象类
学习目标
面向对象回顾
面向对象三大特征之一-继承
继承的格式
Java继承的特点
Java继承中成员访问特点
抽象类
抽象类的格式
抽象类的作用
抽象类的注意事项
设计模式-模板方式
1继承
1.1 为什么要学习继承 ?
1 | 1.当多个类有相同的属性和行为(非私有成员),为解决代码冗余, 提高代码复用性 |
1.2 继承能解决什么问题 ?
1 | 1.多个类的共有的非私有属性和行为提炼到新的类中,提高代码复用性 |
1.3 继承中成员访问的特点 ?
1 | 1.单一继承(可多层) |
1.4 方法重写与方法重载区别在于哪里 ?
方法重载:1
21.发生在本类中, 方法名相同, 参数列表不同(类型,数量,顺序)
2.与返回值类型和权限修饰符无关(可相同可不同)
方法重写:1
2
31.发生在继承关系中(父子类中),当子类与父类的方法一模一样的时候(参数列表和返回值),称为方法重写
2.子类重写的方法权限修饰符 >= 父类的
3.方法重写是为后面的多态做铺垫的
2. 抽象类
2.1 抽象类存在的意义 ?
1 | 1.当某个功能较为抽象, 对不类具体实现方式不一样时, 可以使用抽象方法来定义(无具体实现细节), 从而产生了抽象类作为父类 |
2.2 抽象类使用注意事项 ?
3. 设计模式(难点)
3.1 什么是设计模式 , 设计模式有什么优势 ?
1 | 设计模式就是用来解决某个问题的方案 |
3.2 模板方法设计模式的作用 , 使用的方式 ?
1 | 规定好某个问题的整体框架和结构 |
笔记
面向对象三大特征:
- 封装
- 继承
- 多态
学习技巧:
继承
问题1:什么是继承
1 | 继承发生前提:当多个类中有相同的属性和行为时,把这些相同的属性和行为,抽取出来封装一个独立的类中 |
问题2:继承解决程序中的什么问题?
1 | 1、程序中代码的复用性(重复的代码抽取出来,封装到父类中,子类继承后就可以直接使用) |
问题3:继承怎么使用? //写代码
1 | public class 父类{ |
问题4:继承在使用中有使用注意细节
1 | 1、Java只能单一继承(不能多继承),允许多层次继承 |
方法的体现:
方法重写:
- 什么是方法重写
- 方法重写解决什么问题
- 方法重写怎么实现
- 方法重写有什么注意细节
this关键字的使用:
1 | //访问本类中的成员变量 |
学习套路:
- 这个技术是什么?
- 这个技术可以解决什么问题? (重点)
- 这个技术怎么使用? (重点)
- 这个技术在使用中的注意细节
回顾上午内容:
继承
继承是什么
1
2让一个类继承另一个类
关键字:extends继承可以解决什么问题
1
21、建立类与类之间的关系:父子关系
2、可以解决程序中代码的复用性(子类可以直接使用父类中的非私有成员)继承怎么使用
1
2
3
4
5
6public class 父类{
//成员
}
public class 子类 extends 父类{
//子类可以直接使用父类中的非私有成员
}继承在使用中的注意细节
1
2
3
4
5
6
7
8
91、Java语言只支持单一继承(不能多继承) , 允许多层次继承
2、子类不能继承父类中的私有成员
3、当子类和父类中存在相同的成员时,访问原则:就近原则
super.成员变量
super.成员方法()
super()
super(参数, ...)
4、子类对象在实例化完成之前,必须先初始化父类对象(只有父类初始化完成后子类才可以访问父类成员)
//子类构造方法在执行时,有隐藏代码:super() //默认调用父类中的无参构造方法
方法重写
什么是方法重写
1
当父子类中存在一模一样的非私有成员方法时,就可以称为:子类重写父类的方法(方法重写)
方法重写可以解决什么问题
1
2
3
4
5当父类中的方法,子类在调用时无法满足子类的要求,就可以在子类中重写父类的方法
目的:
1. 为后面学习多态准备
2. 不愿意在起一个方法名方法重写怎么使用
1
2
3
4
5
6
7
8
9
10
11
12
13public class 父类{
public void show(String name){
....
}
}
public class 子类 extends 父类{
//重写方法
public void show(String name){
//重新编写方法体业务代码
}
}方法重写的注意细节
1
21、针对父类中私有方法不能重写
2、必须和父类中的方法一模一样
JVM内存划分:
- 栈 //方法运行在栈内存中
- 堆 //对象存储于堆内存中
- 方法区 //存放加载的.class文件 //方法区有由N多个不同功能的小区域组成
- 寄存器
- 本地方法区
this:当前类对象引用
1 | this.成员方法() |
super:父类对象引用
1 | super.成员方法() |
1 | //父类:动物类 |
普通类:
1 | public class 类名{ |
抽象类:
1 | public class 类名{ |
- 抽象类,不能实例化(不能创建对象)
- 疑问:既然不能创建对象了,为什么还要有构造方法?
- 抽象类通常是用于父类,创建子类对象时,需要先初始化父类(抽象方法中构造方法的作用就是用于父类初始化使用)
- 疑问:既然不能创建对象了,为什么还要有构造方法?
- 抽象类中的抽象方法,必须由子类重写
什么是设计模式?
- 设计模式,就是一种解决方案(解决开发中某个问题的方案)
设计模式解决什么问题?
- 在开发中一些常见问题,可以使用设计模式解决
模板设计模式:
- 模板:就一个固定的格式
- 模板设计:把确定的内容,提前准备好,把不确定的内容,定义为抽象方法(由子类重写)
创建对象:
1 | Student stu = new Student(); //有名字的对象 |
匿名对象:
- 没有名字的对象
1 | new Student(); //创建的对象没有名字 |