将对象转换为子类型时找不到符号

时间:2014-04-17 01:20:44

标签: java constructor casting

尝试编写一个构造函数,它将从Object创建一个新的CastTest对象,如果它是CastTest的一个实例,就像这样(x是CastTest的实例变量):

public CastTest(Object theTestObj)  
    {
        if (theTestObj instanceof CastTest) {
            //this.x = theTestObj.x; // Error: cannot find symbol: variable x ???
            //this.x = (CastTest) theTestObj.x; // Error: cannot find symbol: variable x ???
            //this.x = theTestObj.getX(); // Error: cannot find symbol: method getX() ???
            //this.x = (CastTest) theTestObj.getX(); // Error: cannot find symbol: method getX() ??? 
        }
    }

为什么找不到变量或方法?它们在同一个类定义中定义。

1 个答案:

答案 0 :(得分:1)

在声明的引用类型上解析实例变量。 Object没有x实例字段。适当的演员是

((CastTest)theTestObj).x
// this whole expression is of type CastTest which seems to have a field x

你有什么,这个

(CastTest) theTestObj.x;

相当于

(CastTest) (theTestObj.x)

与之前解释的相同问题

theTestObj.x