Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.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_Binding - Fatal编程技术网

Java 什么类型的绑定具有以下代码?

Java 什么类型的绑定具有以下代码?,java,binding,Java,Binding,我读过一篇关于java早期和晚期绑定的文章。我理解这个概念,但在某些情况下我无法区分它们 代码№1: class Human { public void walk() { System.out.println("Human walks"); } } class Boy extends Human { public void walk() { System.out.println("Boy walks"); } publi

我读过一篇关于java早期和晚期绑定的文章。我理解这个概念,但在某些情况下我无法区分它们

代码№1:

class Human {
    public void walk() {
        System.out.println("Human walks");
    }
}

class Boy extends Human {
    public void walk() {
        System.out.println("Boy walks");
    }

    public static void main(String args[]) {
        Boy obj = new Boy();
        obj.walk();
    }
}
代码№2:

class Human {
    public void walk() {
        System.out.println("Human walks");
    }
}

public class Boy extends Human {
    public void walk() {
        System.out.println("Boy walks");
    }

    public static void test(Boy obj) {        
        obj.walk();
    }

    public static void main(String args[]) {
        Boy obj = new Boy();
        test(obj);
    }
}
代码№3:

class Human {
    public void walk() {
        System.out.println("Human walks");
    }
}

class OldBoy extends Boy {
    public void walk() {
        System.out.println("OldBoy walks");
    }
}

public class Boy extends Human {
    public void walk() {
        System.out.println("Boy walks");
    }

    public static void test(Boy obj) {
        obj.walk();
    }

    public static void main(String args[]) {
        Boy obj = new Boy();
        test(obj);
    }
}

代码中调用obj.walk()的绑定类型是什么(晚绑定还是早绑定)№1、代码№2和代码№3.为什么呢?

这听起来像是家庭作业,这是家庭作业吗?(请注意,家庭作业问题本身并没有被禁止,但你应该知道这是否是家庭作业)。另外,您认为答案是什么?行走方法不是私有的、最终的或静态的。因此,编译器无法确定静态类型,并且在所有情况下都会延迟绑定。代码№本文作者说:“这里我们创建了一个Boy类的对象,并调用了同一个类的walk()方法。因为这里没有什么不明确的地方,编译器将能够在编译时解析这个绑定,这种绑定称为静态绑定。”那么作者错了吗?这取决于。。编译在所有情况下都会发出相同的
invokevirtual{Boy.walk}
bytecode,因此变得更加复杂:-您对早期/晚期绑定的定义是什么?即使编译器不使用这种优化,现在还为时过早吗?