您的位置:首页 > 编程语言 > Java开发

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

2017-05-18 14:43 591 查看
做题的时候遇到的一个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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐