[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
的静态方法。
这与实例方法不同,实例方法是基于运行时对象的类型进行调用的,静态方法则基于引用的类型。