Loading

[Java面向对象]static方法

static方法不能重写

在 Java 中,静态方法不能被重写,但是可以被继承。静态方法属于类本身,而不是类的实例。因此,当你在子类中定义一个与父类静态方法同名的方法时,这不是重写,而是隐藏。

public class classA {
    public static void method(){
        System.out.println("classA的静态方法");
    }
}
public class classB extends classA{
    public static void method(){
        System.out.println("classB的静态方法");
    }
}
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Main {
    public static void main(String[] args) {

        classA.method();
        classB.method();

        classA a = new classA();
        a.method();

        classA b =new classB();
        b.method();

        classB c =new classB();
        c.method();
    }
}
classA的静态方法
classB的静态方法
classA的静态方法
classA的静态方法
classB的静态方法

在 Java 中,静态方法是和类相关联的,而不是和对象相关联的。这意味着静态方法不会因为继承关系或对象的类型发生动态绑定(即运行时的多态性)。静态方法在编译时就已经确定好了它是属于哪个类的,所以在父类引用指向子类对象时,如果通过父类的引用调用静态方法,执行的依然是父类的静态方法,而不是子类的静态方法。

示例代码:

class Parent {
    static void staticMethod() {
        System.out.println("Parent's static method");
    }
}

class Child extends Parent {
    static void staticMethod() {
        System.out.println("Child's static method");
    }
}

public class Test {
    public static void main(String[] args) {
        Parent obj = new Child();
        obj.staticMethod();  // 调用的是父类的静态方法
    }
}

输出:

Parent's static method

解释:

Parent obj = new Child(); 创建了一个 Parent 类型的引用指向 Child 类型的对象,但因为静态方法是编译时绑定的,所以 obj.staticMethod() 会调用 Parent 的静态方法,而不是 Child 的静态方法。

这与实例方法不同,实例方法是基于运行时对象的类型进行调用的,静态方法则基于引用的类型。

posted @ 2024-09-09 19:25  Duancf  阅读(51)  评论(0)    收藏  举报