【问题标题】:Resolution of overriding instance variable in java [duplicate]java中覆盖实例变量的解决方法[重复]
【发布时间】:2017-05-23 12:39:05
【问题描述】:

我知道,当你重载方法时,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,因为在编译和执行类似操作时会解决超载问题:

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

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

【问题讨论】:

  • 嗯,是的。变量是基于引用而不是实例访问的。从概念上讲,没有“覆盖”变量。

标签: java overloading overriding


【解决方案1】:

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

所以当你这样做时

 Animal animal = new Lion();

您从Animal 获取所有变量,从Lion 获取方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-21
    • 2011-11-11
    • 1970-01-01
    • 2013-06-24
    • 2014-11-29
    • 1970-01-01
    相关资源
    最近更新 更多