JAVA,假重写,方法假重写,继承父类时的静态方法假重写,静态方法假重写

做题的时候遇到的一个JAVA子类假重写父类静态方法的问题。



————————————————————————————————————————————————————————————————————————

//父类代码。在父类中定义一个静态方法TSa1,一个非静态方法TSa2

public class TestExtendStatic {
    public static void TSa1(){
    System.out.println("Super Static");
    }
    public void TSa2(){
    System.out.println("Super void");
    }
}

————————————————————————————————————————————————————————————————————————

/*子类代码。在子类中,按照方法重写的格式分别重写静态方法TSa1与非静态方法TSa2

*运行结果证明,TSa2确实被重写了,但是TSa1是一个假重写。

* 从测试结果看出,父类的静态方法不会被重写,子类就算以重写的格式“重写”父类的静态方法,也只是得到了一个假*重写

*/

public class TestExtendStaticSub extends TestExtendStatic {

public static void TSa1(){
System.out.println("Sub Static");
}
public void TSa2(){
System.out.println("Sub void");
}
public static void main(String[] args) {
TestExtendStatic a = new TestExtendStaticSub();

TestExtendStaticSub b = new TestExtendStaticSub();

a.TSa1();//Super Static

b.TSa1();//Sub Static

a.TSa2();Sub void

b.TSa2();Sub void


}

}

————————————————————————————————————————————————

/*进一步测试。从父类继承下来的静态方法TSa1()去哪了

*将子类中的TSa1()注释掉之后再执行,发现a.TSa1();的执行结果又变回了Super Static。说明父类的TSa1();又出现

*了

*所以说,父类的静态方法还是成功被子类继承了,只不过当子类中出现同签名方法时,继承的静态方法会隐藏掉

*/

public class TestExtendStaticSub extends TestExtendStatic {
/*public static void TSa1(){
System.out.println("Sub Static");
}*/
public void TSa2(){
System.out.println("Sub void");
}
public static void main(String[] args) {
TestExtendStatic a = new TestExtendStaticSub();
a.TSa1();//执行结果Super Static
TestExtendStaticSub b = new TestExtendStaticSub();
b.TSa1();
a.TSa2();
b.TSa2();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值