遵义市网站建设_网站建设公司_Django_seo优化
2026/1/21 16:01:44 网站建设 项目流程

知识点 3:面向对象 —— 继承 (Inheritance)

1. 核心理论:什么是继承?

继承是面向对象编程的三大特性之一,它允许我们根据一个已有的类来创建新类。

  • 定义: 一个新类(称为子类或派生类)从一个已有类(称为父类、超类或基类)获取其属性和方法的过程。
  • 关键字: 在 Java 中,使用 extends 关键字来表示继承关系。
  • 核心思想: 代码复用建立 “is-a” (是一种) 的关系。例如,一个“学生”是一种“人”,一个“老师”也是一种“人”。这样,“学生”和“老师”就可以复用“人”所共有的属性和行为。

2. 深度剖析:继承的要点与规则

  • 方法重写 (Method Overriding): 如果子类对父类继承来的某个方法不满意,可以重新实现这个方法。重写的方法必须与父类的方法有相同的方法名、参数列表和返回类型。我们通常在重写的方法前加上 @Override 注解,这是一个好习惯,能让编译器帮忙检查重写是否正确。

  • super 关键字: super 是一个非常有用的关键字,它代表了对父类对象的引用。

    1. 调用父类构造方法: super()super(参数)。在子类的构造方法中,必须调用父类的构造方法,且 super() 调用必须是构造方法中的第一行语句。如果你不写,编译器会自动帮你插入一个无参的 super()
    2. 调用父类方法: super.方法名()。当子类重写了父类的方法后,如果还想在子类方法中执行父类的版本,就可以用 super 来调用。
  • 单继承原则: Java 的类只支持单继承,即一个子类最多只能有一个直接父类。这样做是为了避免多继承带来的“菱形问题”(Diamond Problem),使得类的关系更清晰。

  • final 关键字: final 可以用来限制继承。

    • 如果一个类被声明为 final (如 public final class String),那么它不能被任何类继承
    • 如果一个方法被声明为 final,那么它不能被子类重写
  • Object: 在 Java 中,如果一个类没有明确地 extends 另一个类,那么它会默认继承 java.lang.ObjectObject 类是所有类的“祖先”。


3. 生活中的例子与代码示例:人、学生和老师

  • 生活比喻: 我们可以定义一个“人”类,它具有“姓名”和“年龄”等基本属性,以及“吃饭”、“睡觉”等基本行为。然后,“学生”和“老师”都继承自“人”。

    • “学生”继承了姓名和年龄,并增加了自己的“分数”属性和“学习”行为。
    • “老师”也继承了姓名和年龄,并增加了自己的“科目”属性和“教书”行为。
  • 核心代码示例: 下面的代码就实现了这个关系。

父类:Person.java

package com.study.oop;// 父类 Person
public class Person {// 父类的私有属性,子类不能直接访问private String name;private int age;// 父类的构造方法public Person(String name, int age) {this.name = name;this.age = age;}// 父类的公共方法,可以被子类继承public String getName() {return name;}public int getAge() {return age;}public void displayInfo() {System.out.print("Name: " + name + ", Age: " + age);}
}

子类:Student.java (我们将之前的 Student 类修改一下,让它继承 Person)

package com.study.oop;// Student 类继承自 Person 类
public class Student extends Person {private double score;// 子类的构造方法public Student(String name, int age, double score) {// 第一行必须调用父类的构造方法super(name, age);this.score = score;}public double getScore() {return score;}// 方法重写:重写父类的 displayInfo 方法@Overridepublic void displayInfo() {// 调用父类的方法来显示通用信息super.displayInfo();// 再加上自己的特殊信息System.out.println(", Score: " + score);}
}

子类:Teacher.java

package com.study.oop;// Teacher 类也继承自 Person 类
public class Teacher extends Person {private String subject;public Teacher(String name, int age, String subject) {super(name, age);this.subject = subject;}public String getSubject() {return subject;}// 方法重写@Overridepublic void displayInfo() {super.displayInfo();System.out.println(", Subject: " + subject);}
}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询