我知道当你重载方法然后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();
}
}
你将获得 投入肉em> 因为在运行时阶段解决了重写方法。 但我不明白。为什么当你覆盖实例变量时,你会得到解决编译阶段的情况。例如:
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();
}
}
在这种情况下,我会得到 ??? 。因此,当您覆盖变量时,它看起来像是在编译阶段解析。是这样吗?
答案 0 :(得分:4)
在Java中,只有方法是多态,而不是变量。
所以当你这样做时
Array([test]=>1234) [Register button]
您从 Animal animal = new Lion();
获取所有变量,Animal
中的方法获得执行。