class A { void F() { System.out.println("a"); }}
class B extends A { void F() { System.out.println("b"); }}
public class X {
public static void main(String[] args) {
A objA = new B();
objA.F();
}
}
在这里,F()是动态调用的,不是吗?
说:
...Java字节码不支持动态方法调用。支持的调用模式有
我只是想弄清楚什么时候是静态或动态类型的编程语言,或者同时是静态类型和动态类型的语言,还是动态类型和动态类型的语言。
我感到困惑的是,如果已知一种语言是静态类型的,而变量的类型是已知的或在编译时定义的,在Java的情况下,即
//Java illustration of statically typed
int x, y; //explicit type declaration
x = 5, y = 10; //Now we use the variables
//Groovy illustration of statically typed
def x, y //explicit
我一直在读Dierk Koenig的"Groovy in Action“。Dierk声称这些是Java不能执行的Groovy任务:
- Changing the runtime behavior of objects after they have been created.
我还以为Java也有这个功能--动态分派。有人能解释一下它与Java有什么不同吗?
- Encapsulating logic in objects in a natural way.
这与Java有什么不同?如果你有一个明确的答案,非常感谢你花时间回复。
我对java中的动态绑定有点困惑。这是一个程序,我想知道,是发生了动态绑定还是别的什么。什么是动态绑定?
class A {
int a;
public A() {
a = 9;
}
public void show() {
System.out.print("show in A ; ");
System.out.println("a : " + a);
}
}
public class B extends A {
public B() {
a = 8;
}
public void show() {
System.o
维基百科称:
由于在运行时之前不知道多态对象的特定类型(通常),因此执行的函数是动态绑定的。例如,以以下Java代码为例:
公共无效foo(java.util.List列表){ list.add("bar");}
List是一个接口,因此list必须引用它的一个子类型。它是对LinkedList、ArrayList或其他列表子类型的引用吗?add引用的实际方法直到运行时才知道。
考虑一下这个例子:
List<String> list;
list = new LinkedList<String>();
foo(list);
list = new