1
覆蓋實例變量的我知道,當你重載方法,那麼Java解決它編譯階段所以這就是爲什麼當你寫的東西是這樣的:分辨率在Java
public class SomeClass{
private static void someMethod(Object obj){
System.out.println("obj");
}
private static void someMethod(String str){
System.out.println("str");
}
public static void main(String[] args) {
Object obj = new SomeClass();
obj.someMethod(obj);
}
}
你會得到OBJ,因爲oveloading是在編譯解決,做這樣的事情:
public abstract class Animal {
public void careFor() {
play();
}
public void play() {
System.out.println("pet animal");
}
}
public class Lion extends Animal {
public void play() {
System.out.println("toss in meat");
}
public static void main(String[] args) {
Animal animal = new Lion();
animal.careFor();
}
}
你會得到肉折騰在運行時階段解決了beacuse重寫方法。 但我不明白。爲什麼當你重寫實例變量時,你會得到像在編譯階段解決的情況。例如:
public abstract class Animal {
String name = "???";
public void printName() {
System.out.println(name);
}
}
public class Lion extends Animal {
String name = "Leo";
public static void main(String[] args) {
Animal animal = new Lion();
animal.printName();
}
}
在這種情況下,我會得到???。所以它看起來像在重寫變量時在編譯階段解決。是這樣嗎?
嗯,是的。變量是基於引用訪問的,而不是實例。概念上沒有「壓倒一切」的變量。 – Mena