Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在非静态方法中调用的静态方法的早期绑定_Java - Fatal编程技术网

Java 在非静态方法中调用的静态方法的早期绑定

Java 在非静态方法中调用的静态方法的早期绑定,java,Java,前提条件:超类中的静态方法由同一类中的非静态方法调用,该非静态方法由一个子类的对象调用 我的问题是: 1.编译时:子类对象(现在被视为超类类型)绑定到staticMethod() 2.运行时:子类对象(现在被视为子类的对象)已绑定到nonStaticMethod() 谢谢。静态方法绑定到类-它们不能被重写。非静态方法调用其类的静态方法,隐式指定超类。staticMethod(),还有另一个心爱的“做我的家庭作业”问题……谢谢你的回答。我为自己的英语不好感到惭愧。但这个问题仍然困扰着我。编译时:S

前提条件:超类中的静态方法由同一类中的非静态方法调用,该非静态方法由一个子类的对象调用

我的问题是:

1.编译时:子类对象(现在被视为超类类型)绑定到staticMethod()

2.运行时:子类对象(现在被视为子类的对象)已绑定到nonStaticMethod()


谢谢。

静态方法绑定到类-它们不能被重写。非静态方法调用其类的静态方法,隐式指定
超类。staticMethod()

,还有另一个心爱的“做我的家庭作业”问题……谢谢你的回答。我为自己的英语不好感到惭愧。但这个问题仍然困扰着我。编译时:SubassObject(现在被视为超类类型)绑定到staticMethod()?运行时:子类对象(现在被视为子类的对象)绑定到nonStaticMethod()?@john实例(非静态)方法可以被重写-这是OOP的本质:子类指定其自定义实现(通常是抽象的)超类的行为。绑定到实例方法是(必要的)在运行时完成。但是,不可重写的静态方法在编译时根据调用的上下文进行绑定-变量类型,或者如果不符合条件则从中调用该方法的类。请这样考虑:因为静态方法无法重写,所以超类无法“查看”子类的静态方法,因此它不会调用它们。
package a;

public class SuperClass {

    public static void staticMethod() {
        System.out.println("Superclass.");
    }

    public void nonStaticMethod() {
        staticMethod();
    }
}
package a;

public class SubClass extends SuperClass {

    public static void staticMethod() {
        System.out.println("Subclass.");
    }
}
package a;

public class Demo {

    public static void main(String[] args) {
        SubClass subClassObject = new SubClass();
        subClassObject.nonStaticMethod(); // output: Superclass;
    }
}