当前位置:首页 > 后端开发 > 正文

如何在Java中创建子类?

在Java中创建子类需使用extends关键字,后接父类名称,子类继承父类属性和方法,可添加新成员或重写父类方法,class SubClass extends SuperClass { … }

在Java中创建子类是面向对象编程的核心概念之一,通过继承(Inheritance)实现代码复用和层次化设计,以下是详细步骤和关键要点:

子类创建基础步骤

  1. 定义父类(超类)

    子类需继承一个已存在的父类,例如定义Animal类:

    public class Animal { // 父类 private String name; public Animal(String name) { this.name = name; } public void eat() { System.out.println(name + "正在吃东西"); } }
  2. 使用extends关键字创建子类

    通过extends继承父类的属性和方法:

    public class Dog extends Animal { // 子类 private String breed; // 子类特有属性 // 子类构造方法需调用父类构造方法 public Dog(String name, String breed) { super(name); // 调用父类构造方法 this.breed = breed; } // 子类新增方法 public void bark() { System.out.println("汪汪叫!"); } // 重写父类方法(方法覆盖) @Override public void eat() { super.eat(); // 可选:调用父类方法 System.out.println("狗狗用狗盆吃饭"); } }

关键语法规则

关键字/概念 作用 示例
extends 声明继承关系 class Dog extends Animal
super 调用父类构造方法或成员 super(name)
@Override 标注方法重写(非强制但推荐) @Override public void eat()
构造方法规则 子类构造方法必须先调用父类构造方法 首行写super(...)

继承中的核心特性

  1. 方法重写(Override)

    如何在Java中创建子类? 第1张

    • 子类可重新定义父类方法(需相同方法签名)
    • 使用@Override注解提高可读性
    • 父类方法需非private/final(如父类方法为final void eat()则禁止重写)
  2. 访问权限控制

    • 子类可访问父类public/protected成员
    • 父类private成员对子类不可见(需通过getter/setter访问)
    • 单继承限制

      Java不支持多继承(一个子类只能有一个直接父类),但可实现多个接口:

      public class Dog extends Animal implements Pet, GuardAnimal { // 实现接口方法... }

    • 实际应用场景示例

      场景:电商系统用户管理

      如何在Java中创建子类? 第2张

      常见错误及规避

      1. 构造方法未调用super

        错误提示:“Implicit super constructor is undefined”

        解决:子类构造方法首行必须显式调用super(...)

      2. 意外隐藏父类字段

        错误示例:

        class Parent { int value = 10; } class Child extends Parent { int value = 20; } // 字段隐藏(非重写)

        建议:使用getter/setter替代直接字段访问

      3. 破坏里氏替换原则

        避免子类改变父类行为逻辑(如父类calculateArea()应保持数学一致性)

        如何在Java中创建子类? 第3张

      4. 继承设计最佳实践

        1. 优先使用组合而非继承

          当不存在”is-a”关系时(如Car不是Engine的子类),用组合:

          class Car { private Engine engine; // 组合关系 }
        2. 抽象类与接口选择

          • 需要代码复用 → 用抽象类(可包含具体方法)
          • 需要多继承/定义行为契约 → 用接口
        3. 深度继承限制

          继承层次不超过3层(过度继承导致代码脆弱)

        权威引用说明遵循Oracle官方Java教程[1]的继承规范,设计原则参考Joshua Bloch《Effective Java》[2]第18条”组合优先于继承”,代码示例符合Java SE 17语法标准[3]。

        参考资料

        [1] Oracle Java Docs: Inheritance

        [2] Bloch, J. Effective Java. Addison-Wesley, 2018.

        [3] Java Language Specification: Chapter 8. Classes

0