【问题标题】:why aren't the Stack class methods not available while creating a stack object using parent class vector in java [duplicate]为什么在java中使用父类向量创建堆栈对象时堆栈类方法不可用[重复]
【发布时间】:2020-05-06 16:37:26
【问题描述】:

例如,

向量栈 = new Stack(); // 为什么即使将运行时对象创建为堆栈,Stack 类方法也不可用

stack.push(2); // 错误提示没有找到方法

//vector 是父引用...根据多态性这一定是对的..?

【问题讨论】:

  • 如果将其定义为Vector,则可以将其用作向量而不是堆栈。
  • 你应该有一些关于继承和变量转换的教程
  • 当您将变量声明为超类时,它将是超类类型,您可以直接使用它,仅此而已。 Stack 知道 Vector,但 Vector 不知道 Stack。
  • @JoakimDanielson:你的措辞是错误的。它不是“超类对象”,因为 object 仍然是 Stack。它是Vector 类型的变量。这种确切的区别非常重要,因为它是这种误解的根源。

标签: java


【解决方案1】:

A object = new B(),B是A的子类,当你运行对象的类方法时,会先在A类上搜索,如果找到了,在B类中查找它用不同的 corps 声明,所以如果你想运行一个只包含在 B 类中的方法,你必须这样做:B object = new B(),或者你可以在 A 类中声明它但没有 corps,像这样:

public class Vector { 
...
public static void push() {}
}

【讨论】:

    【解决方案2】:

    Vector stack 定义了一个Vector 类型的变量。然后你用一些东西初始化它。

    变量的类型仍然是Vector,不管你用什么初始化它。

    因此编译器不会让你做任何Vector 不能做的事情(并且Vector 没有push 方法。

    【讨论】:

      【解决方案3】:

      您可以将子类的对象分配给父类的引用,因为子类继承了父类的属性。因此,调用父级的方法可以确保调用将正确地“分派”到子级的实现(如果它覆盖父级实现)。

      但是你不能使用父类型的引用来调用父类中不存在的方法。

      【讨论】:

        猜你喜欢
        • 2016-06-17
        • 2015-07-02
        • 1970-01-01
        • 2017-06-06
        • 1970-01-01
        • 2015-03-28
        • 1970-01-01
        • 1970-01-01
        • 2016-02-27
        相关资源
        最近更新 更多