>[success] # java 继承
* 当多个类之间有**相同**的**特征和行为**时,可以将相同的**内容提取**出来组成 **一个公共类**,让多个类吸收公共类中已有特征和行为而在多个类型只需 要编写自己独有特征和行为的机制,叫做**继承**
~~~
public class Worker extends Person{}
~~~
* Worker类继承自Person类,其中Person类叫做**超类、父类、基类**Worker类叫**做派生类、子类、孩子类**
* **继承作用** 避免代码重复,通过`extends` 继承,子类继承父类后将有**本类的成员(变量和方法)和父类的成员(变量和方法)**,承提高了代码的**复用性**,**可维护性**及**扩展性**
* 使用继承必须满足逻辑关系:**子类 is a 父类**,也就是不能滥用继承。
* Java语言中只支持单继承**不支持多继承**
>[danger] ##### 继承特点
1. 子类无法访问父类的`private`字段或者`private`方法
* 父类
~~~
public class Person {
private int age = 12;
public String name = "w";
private void work() {
System.out.print("私有的子类不能访问");
}
public void sleep() {
System.out.print("共有的子类能访问");
}
}
~~~
* 子类
~~~
public class Worker extends Person {
void userParent() {
sleep();
System.out.print(name);
// worker(); // 私有的无法访问
// System.out.print(age); // 私有的无法访问
}
public static void main(String[] args) {
Worker worker = new Worker();
worker.userParent();
}
}
~~~
2. **子类的对象**时都会**自动调用父类的无参构造方法**, 来初始化从父类中继承的成员变量,相当于在构造方法的第一行增加代 码`super()`的效果,因此`this()`和`super()` 不能共存,想调用父类有参的构造函数需要调用传参`super(参数)`
* 父
~~~
public class Person {
Person() {
System.out.println("无参的构造方法");
}
Person(int age) {
System.out.println("有参的构造方法");
}
Person(String name) {
System.out.println("有参的构造方法");
}
}
~~~
* 子
~~~
public class Worker extends Person {
Worker() {
// 默认相当于调用了无参的构造函数
// super();
System.out.println("子无参的构造方法");
}
Worker(int age) {
// 这么写不可以因为二者要求都是是给首行
// super();
// this();
System.out.println("子有参的构造方法");
}
Worker(String name) {
super(name);
System.out.println("子有参的构造方法");
}
public static void main(String[] args) {
Worker worker = new Worker(); // 无参的构造方法 子无参的构造方法
Worker worker1 = new Worker(10); // 无参的构造方法 子有参的构造方法
Worker worker2 = new Worker("w"); // 有参的构造方法 子有参的构造方法
}
}
~~~
- windows -- 环境变量
- Vscode -- 编写java
- 初始java
- java -- 关键字
- 编写第一个java程序
- java -- 注释
- 计算机存储 -- 进制
- java -- 类型
- java -- 变量
- 数字类型
- 布尔类型
- 字符类型
- 类型转换
- 双等比较是什么
- java -- 运算符
- 算数运算符
- 字符串拼接
- 关系/比较运算符
- 自增减运算符
- 逻辑运算符
- 三目运算
- 赋值运算符
- 移位运算符
- 位运算符
- 运算符优先级
- java -- 流程控制语句
- if /else if /if -- 判断
- switch case分支结构
- for -- 循环
- 用双重for循环
- while -- 循环
- do while -- 循环
- 案例练习
- java -- 数组
- 数组的存储
- 数组的增删改查
- 数组的特点
- 数组案例
- 二维数组
- 数组的工具方法
- java -- 方法
- java -- 方法的重载
- java -- 方法的调用流程
- java -- 类方法传参注意事项
- java -- 方法练习案例
- 对比 return break continue
- for each循环
- java -- 基础练习
- java -- 面向对象
- java -- 创建类和对象
- java -- 访问控制符
- java -- 类成员方法
- java -- 构造方法
- java -- this
- java -- 封装
- java -- 对象内存图
- java -- 创建对象案例
- java -- static
- java -- 继承
- super -- 关键字
- java -- 构造块和静态代码块
- java -- 重写
- java -- final
- java -- 多态
- java -- 抽象类
- java -- 接口
- 引用类型数据转换
- 综合案例
- java -- 内部类
- java -- 回调模式
- java -- 枚举类型
- java -- switch 使用枚举
- java -- 枚举方法使用
- java -- 枚举类实现接口
- java -- javaBean
- java -- package 包
- java -- import
- java -- 递归练习
- java -- 设计模式
- 单例模式
- java -- 注解
- java -- 元注解
- Java -- 核心类库
- java -- 处理字符串
- Java -- String
- String -- 常用方法
- String -- 正则
- Java -- StringBuilder 和 StringBuffer
- 知识点
- Java -- StringJoiner 字符串拼接
- 练习题
- 字符串的总结
- Java -- 包装类
- Integer
- Double
- Boolean
- Character
- java -- 集合类
- java -- util.Collection
- Iterator接口
- java -- util.List
- java -- ArrayList
- java -- util.Queue
- java -- util.Set
- java -- util.Map
- java -- util.Collections
- Java -- Math
- Java -- java.lang
- Java -- Object
- Java -- 获取当前时间戳
- Java -- 异常
- Java -- java.util
- java -- Date
- java -- Calender
- Java -- java.text
- Java -- SimpleDateFormat
- Java -- java.time
- Java -- java.io
- java -- io.File
- java -- 泛型
- IDEA -- 用法