Override(重写)静态方法

本文探讨了Java中静态方法的特性及其与多态之间的关系。通过实例演示了静态方法不能被子类重写,解释了为何静态方法不遵循多态原则。

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

    重写发生在父子类中,子类重写父类(抽象类/接口)的方法,达到解耦的目的。

    但是当被重写的方法被static修饰时(无论父类是否抽象),子类继承了父类的方法之后,不会重写。

    例如:

public class OverrideDemo {
	
public static void main(String[] args) {
		A pra = new B();
		pra.say();
	}

}class A {public static void say(){System.out.println("A");}}class B extends A{public static void say(){System.out.println("B");}}

此时的输出结果是:

B

但是,如果是子类类型引用指向子类类型对象时,会发现调用的还是子类的静态方法。

public static void main(String[] args) {
		B pra = new B();
		pra.say();
	}

此时的输出结果是:

A

由此可以发现,当被子类的静态方法的签名和被继承的静态方法签名相同时,向上造型后子类对象只能调用父类静态方法,看起来是不符合面向对象的多态属性。

静态方法是属于类的,静态方法无法被覆盖。子类无法覆盖父类方法时,就不属于多态。

例如 A a = new B();可以翻译为,一个A类型引用a指向B类型对象。所以它还是属于父类类型,调用的静态方法也就是父类的。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值