当代码有了”血缘关系”
想象你正在组装一辆智能汽车。先造出基础款父类汽车,它有方向盘和油门;再基于它造电动子类汽车,新增充电功能。这就是Java继承的核心:父类提供通用功能,子类扩展专属特性。好比基础款是父亲,电动款是儿子,儿子继承了父亲的基因又发展了自己的个性。

父子身份如何定义
在Java里,用extends关键字建立血缘关系。比如:
class Animal { } // 父类
class Dog extends Animal { } // 子类
这里Animal是父类(超类),像家族族长;Dog是子类,自动获得族长的能力。子类可以访问父类的非私有成员,但父类不能反向访问子类新增的内容——就像长辈不会继承小辈的新技能。
方法重写的变身术
子类不满意父类的方法?直接重写它!比如父类有makeSound方法默认喵叫,子类Cat重写后改成”喵呜~”:
java
class Animal {
void makeSound { System.out.println(“叫”); }
class Cat extends Animal {
@Override
void makeSound { System.out.println(“喵呜~”); }
这时创建Cat myCat = new Cat,调用myCat.makeSound输出的是子类版本。但父类方法并没消失,用super.makeSound就能唤醒它。
super关键字的三大神技
这个不起眼的super实际是父子沟通的密码:
- 召唤父类方法:子类方法里写
super.父类方法,直接调用被重写的父类逻辑 - 启动父类构造器:子类构造函数首行用
super(参数)初始化父类属性 - 避免命名冲突:父子类有同名变量时,
super.变量名明确指定父类版本
就像儿子创业时借用父亲的经验和资源,但最终走自己的路。
构造函数的传承奥秘
创建子类对象时,Java会先秘密调用父类构造器。不写super?编译器自动加!但要注意:
| 场景 | 示例 | 结果 |
|---|---|---|
| 默认构造 | 子类未写super | 自动调用父类无参构造 |
| 父类有参构造 | super(“参数”) | 手动调用指定父类构造 |
| 父类无无参构造 | 未显式调用super | 编译报错!必须显式调用 |
好比儿子出生时,必须先准备好父亲传下来的祖宅地基,才能加盖自己的新楼层。
访问权限的家族规矩
家族成员能共享什么?看访问修饰符:
- public客厅:全家自由进出
- protected书房:父子可进,外人禁入
- private保险箱:仅父类自己能开
子类继承父类时,private成员像锁着的传家宝——知道存在但打不开。想访问?父类需提供public/protected的”钥匙”方法。
多态:父子的角色扮演
最神奇的是父类变量装子类对象:
java
Animal myPet = new Cat;
myPet.makeSound; // 输出”喵呜~
这里编译时按Animal类检查,运行时却执行Cat的方法。就像用”动物”名义收养猫,实际得到的是猫的行为。但要注意:此时不能直接调用Cat独有的方法,除非强转类型。
掌握父类与子类的区别,就像理解家族传承的智慧。父类沉淀共性,子类绽放个性,super关键字是两代间的桥梁。用好继承体系,让代码像家族树一样既稳固又充满活力!
内容均以整理官方公开资料,价格可能随活动调整,请以购买页面显示为准,如涉侵权,请联系客服处理。
本文由星速云发布。发布者:星速云。禁止采集与转载行为,违者必究。出处:https://www.67wa.com/150041.html