资讯动态

Java面向对象进阶:继承与多态学习复盘

发布时间:2026/10/8 18:28:17 来源:尧图企业网站定制
哈喽各位CSDN小伙伴在熟练掌握Java类、对象、成员变量、this关键字、构造方法等基础知识点后我们正式踏入Java面向对象核心进阶内容——继承与多态。继承与多态是Java面向对象三大特性的核心组成部分也是摆脱基础语法、进阶企业级开发的关键。此前编写代码时经常会出现重复定义同类属性、方法的冗余问题而继承完美解决了代码复用问题多态则让代码具备极强的灵活性与扩展性。本篇博客结合我近期的完整学习复盘从零梳理继承、super关键字、代码块执行顺序、final关键字、多态、方法重写与重载、上下转型等全套知识点逻辑清晰、干货满满适合新手收藏学习一、继承实现代码复用梳理类与类的关系1.1 继承的核心概念与意义Java中每一个类都用于描述现实事物的特征与行为而现实中各类事物并非完全独立存在大量共性关联。继承就是用于描述类与类之间的关联关系核心作用是抽取多个类的共性特征与行为统一封装到父类中子类直接复用避免代码冗余大幅提升代码复用性与可维护性。举个生活化的例子人都具备姓名、年龄、体重等基础特征我们可以将这些通用属性抽取出来定义为Person父类。而学生、老师都属于“人”拥有父类的所有共性属性同时各自拥有专属特征学生有学号、老师有工号。此时学生类、老师类无需重复定义通用属性直接继承Person类即可再拓展自身独有特性。在继承体系中抽取共性的通用类称为父类/基类/超类继承父类、复用共性且拥有独有特性的类称为子类/派生类。如果子类与父类完全一致没有任何拓展与差异化就彻底失去了继承的意义。1.2 继承标准语法Java中通过extends关键字实现类的继承语法简洁固定修饰符 class 子类名 extends 父类名{ // 子类独有属性、方法 }1.3 子类访问父类成员的两种情况子类继承父类后可直接使用父类的非私有成员根据成员名称是否重合分为两种访问规则情况1父子类成员变量/方法不同名此时父子类成员相互独立编译器可直接检索对应成员子类可以无差别、直接调用父类和自身的所有成员无冲突、无优先级问题。情况2父子类成员变量/方法同名Java遵循就近原则子类会优先调用自身的同名变量、方法。若同名方法参数列表数量、顺序、类型不同则构成方法重载程序会根据传入的实参精准匹配对应方法执行。1.4 super关键字核心用法当父子类成员同名、需要主动调用父类成员时就必须使用super关键字精准指向父类成员规避就近原则带来的冲突。基础使用语法super.变量名; // 调用父类同名成员变量 super.方法名(); // 调用父类同名成员方法除此之外super还有一个核心作用调用父类构造方法。Java规定子类无法继承父类的构造方法子类自定义构造方法时必须在第一行通过super()调用父类构造方法完成父类成员的初始化。日常编码中如果我们没有手动编写子类构造方法编译器会自动生成默认无参构造方法且默认在第一行隐式执行super()调用父类无参构造保证程序正常运行。1.5 this与super关键字共同点总结两个关键字是Java面向对象的核心关键字共性规则高度一致均为Java内置关键字无需自定义只能在非静态方法中使用用于访问非静态的成员变量与成员方法在构造方法中调用时必须书写在第一行this()和super()无法在同一个构造方法中同时存在二、继承体系下代码块执行顺序普通类的代码块执行顺序为静态代码块 → 实例代码块 → 构造方法。而存在继承关系时执行逻辑会区分父子类遵循先父后子的核心原则整体框架不变执行层级更清晰。class Person { public String name; public int age; public Person(String name, int age) { this.name name; this.age age; System.out.println(Person构造⽅法执⾏); } { System.out.println(Person实例代码块执⾏); } static { System.out.println(Person静态代码块执⾏); } } class Student extends Person{ public Student(String name,int age) { super(name,age); System.out.println(Student构造⽅法执⾏); } { System.out.println(Student实例代码块执⾏); } static { System.out.println(Student静态代码块执⾏); } } public class Test1 { public static void main(String[] args) { Student student1 new Student(王五,12); System.out.println(); Student student2 new Student(李四,3); } }运行结果如下由此可知继承完整执行顺序父类静态代码块类加载时执行仅一次子类静态代码块类加载时执行仅一次父类实例代码块父类构造方法子类实例代码块子类构造方法核心注意点静态代码块仅在类首次加载时执行唯一一次多次创建子类对象不会重复执行若类中同时存在静态变量和静态代码块严格按照代码书写顺序依次加载执行。三、final关键字终止继承的核心修饰符继承可以无限层级传递但过度继承会导致代码层级冗余、逻辑复杂、可读性大幅降低。而final关键字就是继承体系的“终止刹车”用于限制类、方法、变量的权限三种修饰场景作用各不相同final修饰类该类无法被继承彻底终止继承链路final修饰方法该方法无法被子类重写final修饰变量变量变为常量赋值后无法二次修改四、多态代码灵活多变的核心思想4.1 多态核心概念多态顾名思义就是多种形态、灵活多变。是Java面向对象的核心思想指同一段代码传入不同子类对象能够输出不同的执行结果极大提升了代码的通用性与扩展性。多态分为两类编译时多态核心体现为方法重载同一个类中同名方法根据参数不同编译阶段确定执行逻辑运行时多态开发核心常用的多态依托继承与重写实现4.2 运行时多态的三大必要条件缺一不可是实现多态的硬性规则必须存在继承关系子类必须重写父类核心方法通过父类引用指向子类对象调用重写方法多态最终体现统一调用逻辑传入不同子类对象自动匹配并执行对应子类的重写方法。五、方法重写Override详解重写也叫覆盖是子类对父类非私有、非静态、非final、非构造方法的实现逻辑进行重新优化方法外壳不变核心逻辑自定义让子类拥有专属的行为实现。5.1 重写核心规则基础格式方法名、参数列表必须与父类完全一致返回值可不同但必须存在父子类继承关系访问权限子类权限不能低于父类如父类public子类不能用protected/private禁止重写父类private、static、final修饰的方法、构造方法均无法重写注解校验使用Override注解显式标记重写方法编译器会自动校验合法性拼写错误、格式错误会直接编译报错规避新手bug5.2 重写与重载的核心区别二者是多态的两种不同体现极易混淆核心差异一目了然方法重载同一个类中的多态体现方法名相同、参数列表不同属于编译时多态方法重写父子类之间的多态体现方法名、参数列表完全一致属于运行时多态六、向上转型与向下转型6.1 向上转型常用、安全核心定义将子类对象当作父类对象使用从小范围子类类型转为大范围父类类型编译绝对安全是实现多态的核心前提。标准语法父类类型 对象名 new 子类类型();常见使用场景直接赋值、方法参数传递、方法返回值返回优缺点优点代码通用性极强适配多态逻辑简化冗余代码缺点向上转型后父类引用无法调用子类独有的方法只能使用父类定义的方法6.2 向下转型不安全、需校验核心定义将向上转型后的父类引用强制转回子类类型属于逆向转型存在类型转换异常风险安全性低。为解决向下转型的安全问题Java提供instanceof关键字转型前判断对象真实类型返回true时再强制转型可有效规避运行异常。七、学习总结与感悟继承与多态是Java面向对象编程的灵魂彻底改变了基础阶段“逐行编码、重复编码”的思维模式。继承通过抽取共性、复用父类代码解决了代码冗余问题让类与类之间的逻辑关系更加清晰super关键字解决了父子类成员冲突、子类构造初始化的核心问题是继承体系的核心支撑final关键字合理限制继承层级保证代码简洁规范。多态依托继承与重写实现了代码的灵活拓展统一调用逻辑、适配多种子类场景是后续框架开发、接口编程的重要基础。而上下转型、重写重载的区分是编码实操中必须掌握的核心细节也是新手高频易错点。从基础的类与对象到进阶的继承多态编程思维从“面向步骤”彻底转向“面向实体、面向逻辑”。后续我会继续深耕面向对象进阶知识多实操、多复盘夯实Java基础

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑