编程自学指南:java程序设计开发,继承的基本概念和语法,super 关键字的使用,方法重写的规则和应用,理解继承中的多态性

类的继承详解课件

一、课程信息

学习目标

  1. 理解类的继承概念、作用和必要性。
  2. 掌握 Java 中类继承的语法和使用方式。
  3. 学会使用 super 关键字访问父类的成员。
  4. 了解方法重写的概念和实现方法。
  5. 能够运用继承设计和实现简单的类层次结构。

课程重点

  1. 继承的基本概念和语法。
  2. super 关键字的使用。
  3. 方法重写的规则和应用。

课程难点

  1. 理解继承中的多态性(初步感知)。
  2. 合理设计类的继承关系,避免继承滥用。

二、课程导入

生活中的继承现象

在生活中,继承是很常见的概念。比如,子女会继承父母的一些特征,像外貌、性格特点等。同时,子女也会有自己独特的特征和行为。同样,在交通工具这个范畴中,汽车、火车、飞机都继承了交通工具的一些基本属性(如都能载人、载货),但它们又有各自的特点(如汽车适合短途灵活出行,飞机速度快适合长途旅行)。

编程中的重复代码问题

在 Java 编程中,如果我们要创建多个类似的类,会发现有很多代码是重复的。例如,创建一个 Student 类和一个 Teacher 类,它们都有 name 和 age 属性,以及 introduce 方法用于介绍自己。

class Student {
    String name;
    int age;
    String studentId;

    void introduce() {
        System.out.println("我叫 " + name + ",今年 " + age + " 岁,我的学号是 " + studentId);
    }
}

class Teacher {
    String name;
    int age;
    String teacherId;

    void introduce() {
        System.out.println("我叫 " + name + ",今年 " + age + " 岁,我的教师编号是 " + teacherId);
    }
}

可以看到,Student 类和 Teacher 类中关于 name 和 age 属性以及 introduce 方法的部分代码是重复的。为了避免这种代码重复,提高代码的复用性,Java 引入了继承机制。

三、类的继承概念

什么是继承

继承是面向对象编程的三大特性之一,它允许一个类(子类、派生类)继承另一个类(父类、基类)的属性和方法。子类可以复用父类的代码,并且可以在此基础上添加自己的属性和方法,或者重写父类的方法以实现不同的行为。

继承的作用

  1. 代码复用:避免了重复编写相同的代码,提高了开发效率。
  2. 提高可维护性:如果父类的代码需要修改,只需要在父类中进行修改,子类会自动继承这些修改。
  3. 实现多态:为多态性的实现提供了基础,使得程序更加灵活和可扩展。

四、Java 中类继承的语法

语法格式

在 Java 中,使用 extends 关键字来实现类的继承。语法如下:

class 父类 {
    // 父类的属性和方法
}

class 子类 extends 父类 {
    // 子类可以添加自己的属性和方法,也可以重写父类的方法
}

示例代码

// 父类
class Person {
    String name;
    int age;

    void introduce() {
        System.out.println("我叫 " + name + ",今年 " + age + " 岁。");
    }
}

// 子类
class Student extends Person {
    String studentId;

    void study() {
        System.out.println(name + " 正在努力学习。");
    }
}

public class InheritanceExample {
    public static void main(String[] args) {
        Student student = new Student();
        student.name = "张三";
        student.age = 20;
        student.studentId = "001";
        student.introduce(); // 调用从父类继承的方法
        student.study(); // 调用子类自己的方法
    }
}

在这个例子中,Student 类继承了 Person 类的 name 和 age 属性以及 introduce 方法,同时添加了自己的 studentId 属性和 study 方法。

注意事项

  1. Java 中只支持单继承,即一个子类只能有一个直接父类。
  2. 子类不能继承父类的私有成员(private 修饰的属性和方法),但可以通过父类提供的公共方法来间接访问。

五、super 关键字的使用

super 关键字的作用

super 关键字用于引用父类的成员,包括属性和方法。它可以在子类中调用父类的构造方法、访问父类的属性和调用父类的方法。

调用父类的构造方法

在子类的构造方法中,可以使用 super() 来调用父类的无参构造方法,或者使用 super(参数列表) 来调用父类的带参构造方法。需要注意的是,super() 必须是子类构造方法中的第一条语句。

// 父类
class Animal {
    String name;

    Animal() {
        System.out.println("Animal 类的无参构造方法被调用。");
    }

    Animal(String name) {
        this.name = name;
        System.out.println("Animal 类的带参构造方法被调用。");
    }
}

// 子类
class Dog extends Animal {
    String breed;

    Dog() {
        super(); // 调用父类的无参构造方法
        System.out.println("Dog 类的无参构造方法被调用。");
    }

    Dog(String name, String breed) {
        super(name); // 调用父类的带参构造方法
        this.breed = breed;
        System.out.println("Dog 类的带参构造方法被调用。");
    }
}

public class SuperConstructorExample {
    public static void main(String[] args) {
        Dog dog1 = new Dog();
        Dog dog2 = new Dog("旺财", "金毛");
    }
}

访问父类的属性和方法

当子类和父类有同名的属性或方法时,可以使用 super 关键字来访问父类的属性和方法。

// 父类
class Parent {
    int num = 10;

    void printNum() {
        System.out.println("父类的 num 值是:" + num);
    }
}

// 子类
class Child extends Parent {
    int num = 20;

    @Override
    void printNum() {
        System.out.println("子类的 num 值是:" + num);
        super.printNum(); // 调用父类的 printNum 方法
        System.out.println("父类的 num 值通过 super 访问是:" + super.num); // 访问父类的 num 属性
    }
}

public class SuperAccessExample {
    public static void main(String[] args) {
        Child child = new Child();
        child.printNum();
    }
}

六、方法重写

方法重写的概念

方法重写是指子类对父类中已有的方法进行重新定义,方法名、参数列表和返回类型都要和父类中的方法相同,但方法体可以不同。方法重写是实现多态的一种方式。

方法重写的规则

  1. 方法名相同:子类重写的方法名必须和父类被重写的方法名一致。
  2. 参数列表相同:参数的类型、个数和顺序都要相同。
  3. 返回类型兼容:子类重写方法的返回类型必须和父类被重写方法的返回类型相同或者是其子类型。
  4. 访问修饰符不能更严格:子类重写方法的访问修饰符不能比父类被重写方法的访问修饰符更严格(例如,父类方法是 public,子类重写方法不能是 private)。
  5. 抛出的异常不能更多:子类重写方法抛出的异常不能比父类被重写方法抛出的异常更多。

示例代码

// 父类
class Shape {
    void draw() {
        System.out.println("绘制一个形状。");
    }
}

// 子类
class Circle extends Shape {
    @Override
    void draw() {
        System.out.println("绘制一个圆形。");
    }
}

class Rectangle extends Shape {
    @Override
    void draw() {
        System.out.println("绘制一个矩形。");
    }
}

public class MethodOverrideExample {
    public static void main(String[] args) {
        Shape shape1 = new Circle();
        Shape shape2 = new Rectangle();
        shape1.draw(); // 调用 Circle 类重写的 draw 方法
        shape2.draw(); // 调用 Rectangle 类重写的 draw 方法
    }
}

在这个例子中,Circle 类和 Rectangle 类都重写了 Shape 类的 draw 方法,根据对象的实际类型不同,调用的是不同子类重写后的方法,这体现了多态性。

七、课堂练习

练习 1

创建一个 Vehicle 类作为父类,包含 brand(品牌)和 speed(速度)属性,以及 start(启动)和 stop(停止)方法。创建 Car 类和 Bicycle 类继承自 Vehicle 类,分别添加自己的特性和方法,并在子类中重写 start 和 stop 方法。

练习 2

创建一个 Animal 类作为父类,包含 name 属性和 makeSound 方法。创建 Cat 类和 Dog 类继承自 Animal 类,在子类中重写 makeSound 方法,分别输出猫和狗的叫声。

八、课程总结

重点回顾

  1. 类的继承概念、作用和语法。
  2. super 关键字的使用,包括调用父类构造方法、访问父类属性和方法。
  3. 方法重写的概念、规则和应用。

注意事项

  1. 合理设计类的继承关系,避免过度继承导致代码的复杂性增加。
  2. 在重写方法时,要严格遵守方法重写的规则,否则会导致编译错误。

九、课后作业

作业 1

设计一个简单的图形绘制系统,包含 Shape 类作为父类,Triangle(三角形)、Square(正方形)等类继承自 Shape 类。每个子类重写 draw 方法,输出不同图形的绘制信息。同时,在子类中添加自己特有的属性和方法。

作业 2

创建一个 Employee 类作为父类,包含 name(姓名)、salary(工资)属性和 calculateBonus(计算奖金)方法。创建 Manager 类和 Developer 类继承自 Employee 类,重写 calculateBonus 方法,根据不同的规则计算奖金。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zl515035644

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值