调用方法时,堆栈对象“找不到符号”

时间:2012-03-28 04:48:09

标签: java inheritance stack

所以我有一个被称为“家具”的课程。我正在制作我制作的每种家具的堆叠,并将堆叠存储在一个阵列中。

   class Furniture{
    private String color;
    private String style;
    private String height;
    private String width;   
    private String depth;

    public Furniture(String c)
    {
    color = c;
    }
    public Furniture(String s, String c)
    {
    color = c;
    style = s;
    }
    public Furniture(String h, String w, String d, String c)
    {
    height = h;
    width = w;
    depth = d;
    color = c;
    }
    public Furniture(String s, String h, String c)
    {
    style = s;
    height = h;
    color = c;
    }
    public String getColor()
    {
    return color;
    }
}

课程已扩展

class Bed extends Furniture
{
    private String size;
    public Bed(String sz,String c){
    super(c);
    size = sz;
    }
}

然后我尝试调用我的getColor()方法

Stack s = new Stack();
s.push(new Bed("queen","red"));
System.out.println(s.peek().getColor());

java:195: error: cannot find symbol System.out.println(s.peek().getColor());

symbol:   method getColor()
location: class Object

我不确定如何解决这个问题

4 个答案:

答案 0 :(得分:2)

错误是因为,当您 peek()堆叠顶部元素时,它会返回对象类对象,该对象不包含 getColor()方法。因此,您只需要使用通用参数 Bed

创建堆栈

你必须改变

Stack s = new Stack();

Stack<Bed> s = new Stack<Bed>();

现在,当您查看堆叠顶部元素时,它将返回 Bed 对象而不是对象对象。所以 getColor()可以解决。

答案 1 :(得分:1)

您的堆栈没有模板,因此它将默认保存对象。因此,使用peek()返回的对象被视为类Object而不是类Bed。正如您所看到的,Java无法在Object中找到getColor()方法,因为没有。

以下是解决问题的方法:

Stack<Bed> s = new Stack<Bed>();

答案 2 :(得分:-1)

您应该将类​​Furniture的对象设为 -

Furniture f=new Furniture("queen","red");

这将执行以下操作:

1.创建名为f

的类Furniture的对象

2.将f的大小设为女王,其颜色为红色。

现在如果你想打印这个对象的颜色,你应该这样称呼它:

System.out.println(f.getColor());

答案 3 :(得分:-2)

Stack在java.util中。你做peek()是在Stack类的构建方法。所以,你不能像s.peek()。getColor()那样调用。如果在任何类中定义了getColor()方法,则需要创建该类的对象,然后可以使用该类的方法。你得到Cannot find symbol,因为java的Stack类中没有类似getColor()的方法。