静态方法可以重载但是不可以重写

本文通过实例详细解析了Java中的方法重载与重写概念,并对比了静态方法与实例方法在重写过程中的差异。

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

 

重载例子

public class Test {
public static void test(){
System.out.println("hello");
}
public static void test(String s){
System.out.println(s);

}
public static void main(String args[]){
Test.test();
Test.test("nihao");

}
}

结果打印:
hello
nihao

重写例子


public class Test {
public static void test(){
System.out.println("hello");
}
public static void test(String s){
System.out.println(s);

}
class subClass extends Test{
public static void test(){
  
}
}
public static void main(String args[]){
Test.test();
Test.test("nihao");

}
}

发生错误。

将子类声明为静态静态类静态方法就可以重写了

public class Test {
public static void test(){
System.out.println("hello");
}
public static void test(String s){
System.out.println(s);

}
static class subClass extends Test{
public static void test(){
   System.out.println("wrong");
}
}
public static void main(String args[]){
Test.test();
Test.test("nihao");
subClass.test();

}
}

结果打印:

hello
nihao
wrong

 

静态 方法的 重载

在类的继承中会经常遇到方法重载 的问题,

静态 方法的重载 又和普通的方法重载 不同,不过在一般的编程中遇到静态 方法重载 的情况很少。

在编译时,编译器就会根据引用的类来匹配调用的静态 方法,因此就不会在运行时再来匹配相应具体的类中的静态 方法。

举例来说,当声明一个超类的变量调用静态 方法时,就算它在运行时是指向子类的引用,它调用的是超类的静态 方法,而不会根据引用的不同而调用相应子类的静态 方法。

用下面的例子进一步说明这个问题:
public class Override {
?? static class Parent {
????????? static void staticMethod() {
????????????????? System.out.println("Parent Static Method");
????????? }
????????? void instanceMethod() {
????????????????? System.out.println("Parent Instance Method");
????????? }
?? }
?? static class Child extends Parent {
????????? static void staticMethod() {
????????????????? System.out.println("Child Static Method");
????????? }
????????? void instanceMethod() {
????????????????? System.out.println("Child Instance Method");
????????? }
?? }
?? public static void main(String args[]) {
????????? Parent p1 = new Parent();
????????? Parent p2 = new Child();
????????? Child c = new Child();
????????? System.out.print("Parent.static: "); Parent.staticMethod();
????????? System.out.print("p1.static: "); p1.staticMethod();
????????? System.out.print("p2.static: "); p2.staticMethod();
????????? System.out.print("p1.instance: "); p1.instanceMethod();
????????? System.out.print("p2.instance: "); p2.instanceMethod();
????????? System.out.print("Child.static: "); Child.staticMethod();
????????? System.out.print("c.static: "); c.staticMethod();
????????? System.out.print("c.instance: "); c.instanceMethod();
?? }
}


相关文章链接
http://java.sun.com/developer/onlineTraining/new2java/supplements/solutions/June03.html

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值