我对动态绑定和静态绑定感到困惑.我已经读过在编译时确定对象的类型称为静态绑定,在运行时确定它称为动态绑定.
以下代码中会发生什么:
静态绑定还是动态绑定?
这显示了什么样的多态性?
class Animal
{
void eat()
{
System.out.println("Animal is eating");
}
}
class Dog extends Animal
{
void eat()
{
System.out.println("Dog is eating");
}
}
public static void main(String args[])
{
Animal a=new Animal();
a.eat();
}
Run Code Online (Sandbox Code Playgroud) 我偶然发现了这段代码.
我试着猜测在实际操作之前运行它的结果是什么.当我看到它们并需要一些解释时,我真的很困惑.
这是代码:
public class A {
String bar = "A.bar";
A() { foo(); }
public void foo() {
System.out.println("A.foo(): bar = " + bar);
}
}
public class B extends A {
String bar = "B.bar";
B() { foo(); }
public void foo() {
System.out.println("B.foo(): bar = " + bar);
}
}
public class C {
public static void main(String[] args) {
A a = new B();
System.out.println("a.bar = " + a.bar);
a.foo();
}
}
Run Code Online (Sandbox Code Playgroud)
输出是:
B.foo(): bar = …Run Code Online (Sandbox Code Playgroud) 我知道重载是在编译时决定的,但是当我尝试运行下面的示例时,它给出的结果是我无法理解的
package miscellaneous;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class CollectionsOverloading {
public static String classify(Set<?> s) {
return "Set";
}
public static String classify(List<?> s) {
return "List";
}
public static String classify(Collection<?> s) {
return "Collection";
}
public static void main (String args[]) {
Collection<?>[] collections = { new HashSet<String>(), new ArrayList<String>(), new HashMap<String, String>().values()};
for (Collection<?> coll : collections) {
System.out.println(classify(coll));
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我每次运行此代码片段时,我都会得到“Collection”输出,这意味着调用了参数为 Collection 的分类方法。
请解释
我在 Java 中采用了向上和向下转换的概念,它们也被称为扩大和缩小。
好的,我明白了概念和一切。但是,在这种情况下它是如何工作的?
public class ObjPair {
Object first;
Object second;
public ObjPair(Object first, Object second) {
this.first = first;
this.second = second;
}
public Object getFirst() {
return first;
}
public Object getSecond() {
return second;
}
public static void main(String[] args) {
ObjPair objPair = new ObjPair("A",2.2); // Goes widning conversion
System.out.println(objPair.getFirst());
System.out.println(objPair.getSecond());
}
}
Run Code Online (Sandbox Code Playgroud)
ObjPair objPair = new ObjPair("A",2.2);
现在,当我执行objPair.getFirst()和 …
java ×4
casting ×1
collections ×1
constructor ×1
downcast ×1
inheritance ×1
methods ×1
oop ×1
overloading ×1
overriding ×1
polymorphism ×1
upcasting ×1