相关疑难解决方法(0)

静态绑定和动态绑定

我对动态绑定和静态绑定感到困惑.我已经读过在编译时确定对象的类型称为静态绑定,在运行时确定它称为动态绑定.

以下代码中会发生什么:

静态绑定还是动态绑定?
这显示了什么样的多态性?

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)

java oop polymorphism dynamic-binding static-binding

30
推荐指数
2
解决办法
3万
查看次数

使用继承和重写方法在Java中复杂输出

我偶然发现了这段代码.
我试着猜测在实际操作之前运行它的结果是什么.当我看到它们并需要一些解释时,我真的很困惑.
这是代码:

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)

java methods inheritance constructor overriding

2
推荐指数
1
解决办法
146
查看次数

不同类型集合的集合重载

我知道重载是在编译时决定的,但是当我尝试运行下面的示例时,它给出的结果是我无法理解的

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 collections overloading

2
推荐指数
1
解决办法
1223
查看次数

在 Java 中向上转换是如何工作的?

我在 Java 中采用了向上和向下转换的概念,它们也被称为扩大和缩小。

  • UpCasting(扩展)从派生类到基类自动发生。即如果它有一个 is-a 关系。
  • 必须明确地进行向下转换以进行运行时检查。

好的,我明白了概念和一切。但是,在这种情况下它是如何工作的?

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);

  • 这是通过 upcast、String 到 object 和 Double 到 object,状态存储在 objPair 中。伟大的..!!!

现在,当我执行objPair.getFirst()和 …

java casting downcast upcasting

1
推荐指数
1
解决办法
3060
查看次数