Java
基础知识
01概述
02变量
03运算符
04程序控制语句
05数组
06面向对象编程
07代码练习
08重载
09作用域
10构造方法&构造器
11this
12包
13修饰符
14封装
15继承
16super
17覆盖&重写
18多态
19零钱通项目
20类变量&类方法
21抽象类
22接口
23内部类
24枚举
25泛型
26常用API
27lambda表达式
28正则表达式
29异常
30File&IO流
31日志技术
32多线程
33网络编程
-
+
首页
15继承
## 为何需要继承 当需要编写两个类,pupil类与graduate类,但是两个类的属性与方法有很多相同的,怎么办? Pupil类 ```java package com.xbxaq.extend_; public class Pupil { public String name; public int age; private double score; public void setScore(double score) { this.score = score; } public void testing(){ System.out.println(name + " 小学生正在考试..."); } public void show(){ System.out.println("学生名" + name + ", age:" + age + ", 成绩:" + score); } } ``` Graduate类 ```java package com.xbxaq.extend_; public class Graduate { public String name; public int age; private double score; public void setScore(double score) { this.score = score; } public void testing(){ System.out.println(name + " 大学生正在考试..."); } public void show(){ System.out.println("学生名" + name + ", age:" + age + ", 成绩:" + score); } } ``` Extend01类 ```java package com.xbxaq.extend_; public class Extend01 { public static void main(String[] args) { // 小学生 Pupil pup = new Pupil(); pup.name = "xbxaq"; pup.age = 10; pup.testing(); pup.setScore(60.5); pup.show(); // 大学生 Graduate gra = new Graduate(); gra.name = "小白"; gra.age = 19; gra.testing(); gra.setScore(78.9); gra.show(); } } ```  ## 概述 继承可以解决代码的复用,当多个类存在相同的属性(变量)和方法时,可以从这些类中抽象出父类。 在父类中定义这些相同的属性(变量)和方法,所有的子类不需要重新定义这些属性(变量)和方法,只需要通过extends来声明继承父类即可。 ## 语法 ```txt class 子类 extends 父类 { } ``` - 子类会自动拥有父类中的属性(变量)和方法 - 父类又被称之为超类、基类 - 子类又被称之为派生类 ## 示意图  ## 修改后 student类 ```java package com.xbxaq.extend_.improve_; public class Student { public String name; public int age; private double score; public void setScore(double score) { this.score = score; } public void show(){ System.out.println("学生名" + name + ", age:" + age + ", 成绩:" + score); } } ``` Graduate类 ```java package com.xbxaq.extend_.improve_; public class Graduate extends Student{ public void testing(){ System.out.println(name); } } ``` Pupil类 ```java package com.xbxaq.extend_.improve_; public class Pupil extends Student{ public void testing(){ System.out.println(name); } } ``` Extend01类 ```java package com.xbxaq.extend_.improve_; public class Extend01 { public static void main(String[] args) { Pupil pup = new Pupil(); pup.name = "小白学安全"; pup.age = 12; pup.testing(); pup.setScore(70.); pup.show(); // 大学生 Graduate gra = new Graduate(); gra.name = "xbxaq"; gra.age = 28; gra.testing(); gra.setScore(88.9); gra.show(); } } ```  ## 细节 - 子类继承了父类的所有属性(变量)和方法,但是私有属性不能直接在子类中访问,要通过父类提供公共的方法去访问。 - 子类必须调用父类的构造器,完成父类的初始化。 - 当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器。如果父类没有提供无参构造器,则必须在子类的构造器中用super关键字去指定使用父类的哪个构造器完成对父类的初始化工作,否则编译不通过。 - 如果希望指定去调用父类的某个构造器,则显式的调用。 - super()在使用时,需要放在构造器的第一行。 - super()和this 都只能放在构造器的第一行,因此两个方法不能共存在同一个构造器中。 - Java所有类都是object类的子类。 - 父类构造器的调用不限于直接父类!将一直往上追溯直到object类(顶级父类)。 - 子类最多只能继承一个父类(指直接继承),既Java是单继承机制。 - 不能滥用继承,子类和父类之间必须满足is-a的逻辑关系。
毛林
2025年9月7日 12:13
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码