超类 (Superclass) 的定义以及继承 (extends)和实现 (implements)

超类 (Superclass) 的定义

超类(Superclass)是面向对象编程中的一个核心概念:

  • 超类:也称为父类(Parent Class)或基类(Base Class),是被其他类继承的类
  • 子类:也称为派生类(Derived Class)或子类(Child Class),是继承自超类的类

相关概念

1. 继承 (Inheritance)

// 示例:超类
class Animal {
    protected String name;
    
    public void eat() {
        System.out.println(name + " is eating");
    }
}

// 子类继承超类
class Dog extends Animal {
    public void bark() {
        System.out.println(name + " is barking");
    }
}

2. 方法重写 (Override)

  • 子类可以重写超类中的方法来提供特定实现
  • 使用 @Override 注解确保正确重写

3. super 关键字

  • 用于访问超类的成员变量和方法
  • 在子类构造函数中调用超类构造函数

4. 多层继承

  • 类可以有祖父类、曾祖父类等更上层的超类
  • Java 中所有类都直接或间接继承自 Object

5. 抽象类和接口

  • 抽象类通常作为超类设计
  • 接口可以被类实现,也是一种特殊的"超类型"关系

继承 (Inheritance) 与实现 (Implementation) 的区别

1. 基本概念

继承 (extends)

  • 子类继承超类的属性和方法
  • 建立 "is-a" 关系
  • 单继承(Java中一个类只能继承一个父类)

实现 (implements)

  • 类实现接口中定义的方法
  • 建立 "can-do" 关系
  • 多实现(一个类可以实现多个接口)

2. 语法差异

// 继承 - 单继承
class Dog extends Animal {
    // 继承Animal类的属性和方法
}

// 实现 - 多实现
class Dog implements Runnable, Jumpable {
    // 必须实现Runnable和Jumpable接口中的所有方法
}

// 同时使用继承和实现
class Dog extends Animal implements Runnable, Jumpable {
    // 继承Animal,实现多个接口
}

3. 主要区别对比

特性 继承 (extends) 实现 (implements)
关键字 extends implements
继承数量 单继承(1个类) 多实现(多个接口)
访问修饰符 可继承protected及以上的成员 只能访问public成员
方法重写 可选择性重写方法 必须实现所有抽象方法
构造函数 子类构造函数中调用super() 无构造函数概念

4. 设计理念

继承

  • 表示类之间的层级关系
  • 适用于有共同属性和行为的类
  • 体现"is-a"关系(如Dog is an Animal)

实现

  • 定义类应该具备的行为能力
  • 适用于定义规范和契约
  • 体现"can-do"关系(如Dog can Run)

5. 实际应用示例

// 超类 - 定义共同属性
abstract class Animal {
    protected String name;
    
    public Animal(String name) {
        this.name = name;
    }
    
    public void eat() {
        System.out.println(name + " is eating");
    }
    
    // 抽象方法,子类必须实现
    public abstract void makeSound();
}

// 接口 - 定义行为规范
interface Flyable {
    void fly();
}

interface Swimmable {
    void swim();
}

// 继承超类并实现多个接口
class Duck extends Animal implements Flyable, Swimmable {
    public Duck(String name) {
        super(name);
    }
    
    @Override
    public void makeSound() {
        System.out.println(name + " says quack");
    }
    
    @Override
    public void fly() {
        System.out.println(name + " is flying");
    }
    
    @Override
    public void swim() {
        System.out.println(name + " is swimming");
    }
}
posted @ 2025-08-20 20:33  一刹流云散  阅读(59)  评论(0)    收藏  举报