在java中重写实例变量的解决方案

时间:2017-05-23 12:39:05

标签: java overloading override

我知道当你重载方法然后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();
    }
}

你将获得 投入肉 因为在运行时阶段解决了重写方法。 但我不明白。为什么当你覆盖实例变量时,你会得到解决编译阶段的情况。例如:

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

在这种情况下,我会得到 ??? 。因此,当您覆盖变量时,它看起来像是在编译阶段解析。是这样吗?

1 个答案:

答案 0 :(得分:4)

在Java中,只有方法是多态,而不是变量。

所以当你这样做时

Array([test]=>1234) [Register button]

您从 Animal animal = new Lion(); 获取所有变量,Animal中的方法获得执行。