介绍:
使用extends关键字,让类与类之间产生子父类关系,子类可以直接使用父类公共的属性和方法
使用场景:
当多个类之间具有共同特征,将共同属性抽取到父类,使子类继承父类,子类独有的属性和行为则定义到子类中
好处与弊端:
好处:提高了代码的复用性、减少代码冗余、提高了代码的维护性、是多态的前提
弊端:增强了类的耦合性
开发的推荐原则 : 高内聚, 低耦合
继承中访问成员(成员变量、成员方法)的特点:就近原则
- 问题 1: 当子父类中出现了重名的成员变量, 调用的时候, 优先使用谁的 ? 怎么区分 ?
调用的时候按照就近原则,使用子类的成员变量,使用super关键字区分
问题2 : 子父类中出现了重名的成员方法, 创建子类对象调用方法, 执行的是谁的逻辑 ?
执行的是子类的方法逻辑, 因为子类将父类的方法进行了方法重写如何在子类中使用父类的成员:
使用super关键字,指定访问父类的成员。格式:super.父类成员变量/父类成员方法
继承中构造方法的访问特点
子类初始化之前, 必须要先调用父类的构造器,完成父类数据空间的初始化
子类如何访问到父类构造方法
在所有子类构造方法中, 第一行都默认隐藏了一句 super(); 访问父类的空参数构造方法
this关键字
含义:代表当前对象的地址
this.本类成员变量
this.本类成员方法();
this();调用本类构造方法super关键字
super : 代表父类存储空间的标识,(可理解为父类的地址),调用父类相关成员
super.父类的成员变量;
super.父类的成员方法();
super(); 父类的构造方法
super的省略规则 : 在子类当中, 调用父类的成员方法, 如果这个方法子类没有重写过, super.可以省略不写
this(…)和super(…)使用注意点:
子类通过 this (…)去调用本类的其他构造器,本类其他构造器会通过 super 去手动调用父类的构造器,最终还是会调用父类构造器的。
注意:this(…) super(…) 都只能放在构造器的第一行,所以二者不能共存在同一个构造器中。方法重载 (Overload):
在同一个类中, 方法名相同, 参数不同, 与返回值无关
参数不同: 1. 个数 2. 类型 3. 顺序方法重写 (Override):
子类重写父类方法,需要保证方法声明完全一致(方法名,参数,返回值类型需要保持一致)
为什么要重写父类的方法:对父类的方法,做方法增强方法重写的注意事项:
子类不能重写父类的静态方法
- 父类中私有方法不能被重写
-
继承的特点:
子类可以继承父类的属性和行为,但是子类不能继承父类的构造器
- Java 只支持单继承, 不支持多继承, 但是可以多层继承
- Java中所有的类都是Object类的子类
子类是否可以继承父类的私有成员:
可以继承,只是不能直接访问。
子类是否可以继承父类的静态成员:
子类可以直接使用父类的静态成员(共享)
个人认为:子类不能继承父类的静态成员。(共享并非继承)
权限修饰符:
private : 在同一个类中
(default) : 在同一个类中, 同一个包中
protected : 在同一个类中, 同一个包中, 不同包的子类
public : 任意位置
final修饰符
含义:是一种修饰符, 代表最终,可以修饰 (方法, 类, 变量)
被 final关键字修饰后的特点 :
方法 : 不能被重写
类 : 不能被继承
变量 : 只能赋值一次, 不可做修改
final修饰局部变量
问题 : final修饰基本数据类型变量, 引用数据类型变量, 有什么区别 ?
- 基本数据类型 : 数据值不可改变
-
final修饰成员变量 : 初始化赋值时机
在定义的时候直接赋值
-
final修饰的变量,就变成了自定义常量
1.字面值常量 2. 自定义常量
命名规范: 1.如果是一个单词,所有字母大写 VALUE
2.如果是多个单词,所有字母大写,中间使用_分割 MAX_VALUE
static(静态)修饰符
static 修饰成员变量、成员方法
static修饰成员变量:表示该成员变量只在内存中只存储一份,可以被共享访问、修改。
被 static 修饰的成员特点 :被该类的所有对象所共享
- 多了一种调用方式, 可以通过类名.调用(推荐使用)
-
static访问注意事项:
static方法中, 只能访问静态的成员,不可以直接访问实例成员
- 实例方法可以访问静态的成员,也可以访问实例成员。
- 静态方法中是不可以出现this关键字的。
static 修饰成员方法场景:
思路 : 一个方法的功能可以独立存在, 并且没有使用非静态的成员, 就可以设计为 static(为了使用类名调用)