首页 > 趣闻 > 正文内容

Java子类如何获取并调用父类方法?代码演示

趣闻2025-05-19 12:41:58

(拍大腿)哎!刚学Java那会儿,我最头疼的就是这个继承关系里的方法调用。明明在父类写好的方法,到子类怎么就找不到了?今天咱们就掰开了揉碎了说说这事儿,保证你看完能拍着胸脯说:"就这?"


一、为啥要折腾父类的方法?

举个现实点的例子啊(掏出手机),你看手机都有开机功能吧?假设小米手机继承自"手机"这个父类,现在要给小米手机加个虹膜解锁的新功能。这时候咱们既要用原来的开机方法,又要加新功能,总不能把父类代码复制一遍吧?这就得靠继承里的方法调用了。


二、super关键字:你的万能钥匙

??重点来了!?? 这个长得像超级英雄的super关键字,就是访问父类方法的直达电梯。咱们直接看代码更明白:

java复制
class 手机 {
    void 开机(){
        System.out.println("长按电源键3秒");
    }
}

class 小米手机 extends 手机 {
    @Override
    void 开机() {
        super.开机();  // 先执行父类原有开机方法
        System.out.println("虹膜扫描中...");
    }
}

(敲黑板)注意看这里!当子类重写开机方法时,用super.开机()就能先执行父类的原始操作。这就好比装修房子时,咱们可以在原来的墙面上贴壁纸,不用把整面墙拆了重建。


三、方法重写的正确姿势

很多新手容易在这里栽跟头,咱们得说说注意事项:

  1. ??方法签名要一模一样??(就像办护照复印件不能少字)
  2. 访问权限不能比父类更严格(父类用public,子类不能用protected)
  3. 返回值类型要兼容(可以用子类类型替代父类类型)

举个反例警示下:

java复制
class 父类 {
    public void 吃饭() { ... }
}

class 子类 extends 父类 {
    private void 吃饭() { ... } // 这样编译直接报错!
}

(摊手)看到了吧?把public改成private就像给自家大门加了三道锁,连快递都进不来,肯定不行啊!


四、反射调用:非常时期的非常手段

虽然不推荐新手用,但咱们也得知道有这招。比如父类方法被藏起来了(private修饰),这时候反射就能派上用场:

java复制
public class 黑科技 {
    public static void main(String[] args) throws Exception {
        子类 obj = new 子类();
        Method 父类方法 = obj.getClass().getSuperclass()
                            .getDeclaredMethod("隐藏方法");
        父类方法.setAccessible(true);
        父类方法.invoke(obj);
    }
}

(扶眼镜)这就好比用万能钥匙开保险箱,虽然能开但风险大。建议先用常规方法解决,实在没招了再用反射。


五、那些年我踩过的坑

  1. ??过度使用super??:有个项目我见人就写super.method(),结果父类一改方法名,200多个子类全崩了(捂脸)
  2. ??构造方法陷阱??:子类构造方法里如果不写super(),Java会偷偷给你加个无参super()。要是父类没有无参构造方法...(你懂的)
  3. ??多层继承噩梦??:爷爷类的方法用super调用,在爸爸类又被重写,到孙子类就彻底懵圈了

六、什么时候该用/不该用?

(托腮思考)根据我的项目经验:
? 适合用的情况:

  • 扩展父类功能(比如先验证权限再执行操作)
  • 模板方法模式(父类定框架,子类填细节)
  • 兼容旧版本代码

? 别用的情况:

  • 父类方法即将废弃时
  • 需要完全改变原有逻辑时
  • 性能要求极高的场景(多次super调用会影响效率)

七、个人血泪教训

刚工作那会儿,我觉得继承就是"万能胶",见着重复代码就用继承。结果项目做到后期,类之间的关系复杂得跟蜘蛛网似的。后来才明白,继承就像吃火锅时的麻酱——适量提鲜,过量就糊嘴了。

现在我的原则是:能组合不用继承,必须继承时严格控制层级。就像收拾衣柜,把衣服按季节分类(继承)虽然方便,但要是分得太细(比如按颜色分三层),找件衣服得翻半天,反而效率更低。

(喝水)说到底,技术没有好坏,关键看用得是否恰当。就像这把super钥匙,用好了是解决问题的利器,用不好就成了埋雷的铲子。咱们下回见!

搜索