java子类隐藏_为什么父类的静态方法隐藏在Java的子类中?

当我们有两个类时,一个扩展另一个类,如果这两个类具有相同的方法,包括参数和返回类型(例如,样本),则子类中的方法将覆盖超类中的方法。

即由于它是继承。如果我们实例化子类,则会在子类对象中创建超类成员的副本,因此这两种方法都可用于子类的对象。

但是,如果调用方法(样本),则将执行子类的样本方法,以覆盖超类的方法。

示例class Super{

public static void sample(){

System.out.println("Method of the superclass");

}

}

public class OverridingExample extends Super {

public static void sample(){

System.out.println("Method of the subclass");

}

public static void main(String args[]){

Super obj1 = (Super) new OverridingExample();

OverridingExample obj2 = new OverridingExample();

obj1.sample();

obj2.sample();

}

}

输出结果Method of the superclass

Method of the subclass

覆盖静态方法

当超类和子类包含相同的方法(包括参数)以及它们是否为静态时。超类中的方法将被子类中的方法隐藏。

这种机制简称为“方法隐藏”,尽管超类和子类具有静态的相同签名的方法,但它不被视为覆盖。

示例class Super{

public static void demo() {

System.out.println("This is the main method of the superclass");

}

}

class Sub extends Super{

public static void demo() {

System.out.println("This is the main method of the subclass");

}

}

public class MethodHiding{

public static void main(String args[]) {

MethodHiding obj = new MethodHiding();

Sub.demo();

}

}

输出结果This is the main method of the subclass

隐藏方法的原因

方法重载的关键是,如果超类和子类具有具有相同签名的方法,则对于子类的对象,它们两者均可用。根据用于保存对象的对象类型(引用),将执行相应的方法。SuperClass obj1 = (Super) new SubClass();

obj1.demo() // invokes the demo method of the super class

SubClass obj2 = new SubClass ();

obj2.demo() //invokes the demo method of the sub class

但是,在使用静态方法的情况下,由于它们不属于任何实例,因此您需要使用类名进行访问。SuperClass.demo();

SubClass.Demo();

因此,如果父类和子类具有具有相同签名的静态方法,则子类对象可以使用父类方法的副本。由于它们是静态的,因此方法调用会在编译时自行解决,因此静态方法无法覆盖。

但是,由于可以使用静态方法的副本,因此,如果您调用子类方法,则将重新定义/隐藏超类的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值