ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
>[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"); // 有参的构造方法 子有参的构造方法 } } ~~~