Java 抽象和接口(interface)

标签 java interface static abstraction

自从我搞乱 Java 抽象和/或接口(interface)以来已经有相当长的时间了,但我现在为了一个项目又回到了它,有些事情让我很紧张。下面是我的代码片段。

public class A {

    private static String name = "None";
    private static String description = "No description";

    public A() {}

    public A(User user) {
        user.setData(this);
    }

    public static String getName() {
        return name;
    }

    public static String getDescription() {
        return description;
    }

}

public class B extends A {

    private static String name = "B";
    private static String description = "This is B";

    public B() {}

    public B(User user) {
        super(user);
    }

}

public class User {

    private A a;

    public void setData(A a) {
        this.a = a;
    }

    public A getData() {
        return a;
    }

}

当我使用 B.getName() 时我希望它返回 "B"但它返回了 "None" .

现在我显然做错了什么,四处搜索也没有一点帮助。我相当肯定这在某种程度上是可能的,除非我对另一种语言感到困惑。

有人可以指出我正确的方向吗?谢谢。

最佳答案

您在类 B 上调用了 getName 方法。B 没有名为 getName 的静态方法,因此它在父类(super class) A 中查找它,父类(super class) A 有。

也许您希望 B 的名称版本覆盖 A 的名称?变量不会被覆盖。 A 正在访问在 A 上定义的静态变量名称,该方法最初是在 B 上调用的并不影响。

继承和静态方法不能很好地协同工作。诸如多态性之类的 OO 概念依赖于运行时调度,static 一词应该暗示与之相反。使用多态性,程序可以在较高的抽象级别上工作,通过父类(super class)型引用对象并让子类处理细节。使用静态方法时,您必须引用要调用该方法的特定子类,因此您没有那种抽象级别。

关于Java 抽象和接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37749118/

相关文章:

java - Android Textview 资源未找到

java - 在 C++ 中使用匿名类实现接口(interface)

java - 静态 final 列表的接口(interface)或类?

java - 多次调用 Function 的更好方法

java - Android升级到 'com.google.android.gms:play-services-ads:18.1.0'后编译报错

java - 创建一个发送到后台并关闭的 bat 文件(1 个文件)

java - 了解 Java 中的已检查与未检查异常

c# - 创建使用通用参数的通用服务接口(interface)

c++ - 模板化类中的静态常量成员初始化

java - 其他类能够访问对象类型的数组列表