Java面试之静态方法能否被重写

本文探讨了Java中多态性和静态方法的行为,解释了为什么父类引用指向子类对象时,只能调用父类的静态方法,以及子类如何隐藏而不是重写这些方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

演示

package com.mxx.demospring.demo;

public class Son extends Father{

    @Override
    public void m02() {
        System.out.println("son m02");
    }

    public static void m01() {
        System.out.println("son m01");
    }


    public static void main(String[] args) {
        Father son = new Son();
        /**
         * 子类重写父类普通方法,体现了多态性
         */
        son.m02(); // son m02
        /**
         * 结论:
         * 父类引用指向子类对象时,只会调用父类的静态方法。
         * 父类和子类中含有的其实是两个没有关系的方法,它们的行为也并不具有多态性。
         * */
        son.m01(); // father m01
        /**
         * 结论:
         * 类执行了自己申明的静态方法。
         * 该子类实际上只是将父类中的同名静态方法进行了隐藏,而非重写。
         * */
        Son.m01();  // son m01
    }

}

结论:

  1. 在Java中静态方法可以被继承,但是不能被覆盖,即不能重写。
  2. 如果子类中也含有一个相同的静态方法,那么该子类实际上只是将父类中的该同名方法进行了隐藏,而非重写。
  3. 父类引用指向子类对象时,只会调用父类的静态方法。所以,它们的行为也并不具有多态性

java中不能被重写的方法

  1. final 修饰的
  2. static 修饰的
  3. private 修饰的:因为私有的在子类中不可见
  4. 如果跨包的话,修饰符缺省的也不能被重写,因为缺省的挎包不可见

参考:

https://www.cnblogs.com/vcgo/p/10459352.html
https://www.cnblogs.com/xhwy-1234/p/12517692.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值