У меня есть две ситуации, и странные различия между ними вызывают у меня некоторое горе.Я попытаюсь подробно описать их ниже в коде.
Ситуация 1:
public void doSomething(Object obj) {
//do something with obj
}
public void doSomething(String str) {
//do something similar to str, but apply some custom
//processing for String's
}
Object o = new String("s");
doSomething(o); // this will use the Object version...
Ситуация 2:
class Dog {
void makeSound() {
System.out.println("woof");
}
}
class Chihuahua extends Dog {
void makeSound() {
System.out.println("yip");
}
}
Dog dog = new Chihuahua();
dog.makeSound(); //will print 'yip', the Chihuahua version...
Почему в первой ситуации это тип времени выполненияпараметра не используется, но в ситуации два это?Я понимаю, что примеры на самом деле разные вещи, но мне более любопытно, что здесь происходит «под прикрытием».