当前位置: 首页 > news >正文

Java——继承

一、继承是什么?

继承是Java面向对象编程的核心特性,允许子类(派生类)继承父类(基类/超类)的属性和方法,形成类层次结构。子类通过extends关键字继承父类,实现代码复用和扩展。
核心要点

  1. 关系模型:符合is-a关系(如DogAnimal)1。
  2. 继承内容:非私有(非private)的属性和方法10。
  3. 单继承限制:Java类只能直接继承一个父类,但可通过接口实现多继承111。

示例

class Animal {  // 父类
    void eat() { System.out.println("Eating..."); }
}

class Dog extends Animal {  // 子类
    void bark() { System.out.println("Barking..."); }
}

public class Test {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.eat();  // 继承父类方法
        dog.bark(); // 子类扩展方法
    }
}

二、继承怎么用?

1. 语法与步骤
  • 使用extends关键字:子类声明继承父类。
  • 构造方法调用
    • 子类构造方法默认调用父类无参构造(隐式super())。
    • 若父类没有无参构造,需显式调用super(参数),且必须为构造方法的第一行38。

示例

class Parent {
    Parent(int x) { System.out.println("Parent构造方法"); }
}

class Child extends Parent {
    Child() {
        super(10);  // 显式调用父类有参构造
        System.out.println("Child构造方法");
    }
}
2. 方法重写(Override)
  • 规则:子类方法名、参数列表、返回类型与父类相同,访问权限不能更严格8。
  • 使用@Override注解:增强可读性并触发编译器检查。

示例

class Animal {
    void sound() { System.out.println("动物叫声"); }
}

class Cat extends Animal {
    @Override
    void sound() { System.out.println("喵喵~"); }  // 重写父类方法
}
3. super关键字
  • 用途
    • 调用父类方法:super.methodName()
    • 访问父类属性:super.fieldName8。

三、继承的用途

  1. 代码复用:避免重复编写公共代码(如多个类共享nameid属性)15。
  2. 扩展功能:子类可添加新方法或重写父类方法(如Dog类扩展bark()方法)6。
  3. 多态支持:父类引用指向子类对象,实现运行时动态绑定8。
  4. 层次化管理:构建清晰的类层次结构(如动物 → 哺乳动物 → 狗)7。

四、关键细节与注意事项

  1. 访问权限

    • 子类无法直接访问父类的private成员,需通过公有方法(如getter/setter)间接访问310。
    • protected成员允许子类跨包访问8。
  2. 构造方法顺序

    • 父类构造方法先于子类执行3。
    • 多层继承时,构造方法按继承链从上到下依次调用8。
  3. 避免滥用继承

    • 优先使用组合(has-a关系)而非继承,仅在符合is-a关系时使用6。
    • 过深的继承层次会增加代码耦合度10。
  4. final关键字限制

    • final修饰的类不可被继承,方法不可被重写,变量不可被修改8。
  5. 接口与抽象类

    • 接口(implements)支持多继承,定义行为规范;抽象类(extends)提供部分实现11。

五、典型问题与解决方案

Q1:如何解决父类没有无参构造的问题?

答案:子类构造方法中必须显式调用父类有参构造super(参数)3。

Q2:子类能否继承父类的静态方法?

答案:可以继承,但不能重写(静态方法属于类,不存在多态性)8。

Q3:如何实现类似“多继承”的功能?

答案:通过接口实现多继承(如class C implements A, B)111。


参考资料

  • 1 菜鸟教程 - Java继承基础概念与示例
  • 3 CSDN - 继承的使用方法与构造方法调用
  • 57 继承的作用与设计原则
  • 810 继承的细节与限制
  • 11 接口与继承的区别

相关文章:

  • 【OS安装与使用】part5-ubuntu22.04基于conda安装pytorch+tensorflow
  • 深入解析 sudo -l 命令的输出内容
  • pdf预览在vue项目中的使用兼容ie浏览器
  • 面对STM32的庞大体系,如何避免迷失在细节中?
  • [python]windows上安装yolov12环境
  • 选好加密狗,一次说全
  • Deepseek快速做PPT
  • Go Web 项目实战:构建 RESTful API、命令行工具及应用部署
  • 用C++ Qt实现安卓电池充电动效 | 打造工业级电量控件
  • nodejs链接redis
  • webSocket
  • Python装饰器本质250220
  • HTTP与网络安全
  • 华为最新OD机试真题-找单词-Python-OD统一考试(E卷)
  • topN 相似度 torch实现
  • Oracle JDK、Open JDK zulu下载地址
  • Java 与设计模式(17):责任链模式
  • 使用 Docker-compose 部署 MySQL
  • 【蓝桥】二分法
  • DP-最长公共子序列
  • 董明珠的接班人还是董明珠
  • 呈现“民族脊梁型爱国学府”曲折辉煌的办学历程,这个展览开幕
  • 蔚来李斌:当下国际贸易环境有不确定性,但坚信中国汽车产业最终将占全球四成份额
  • 浦江观察|3.6亿元消费券,为上海餐饮业带来了什么?
  • 上海银行换帅:顾建忠出任党委书记,金煜辞任董事长
  • 受贿超8.22亿,新疆维吾尔自治区党委原副书记李鹏新一审被判死缓