2015-11-26 46 views
2

好了,所以这里是我的代码:错误:无法找到符号 - 无法访问另一个类的公共领域

class ConnectionTest implements Connection { 
    Random randomGenerator; 
    public String id; 

    public ConnectionTest() { 
     randomGenerator = new Random(); 
     id = UUID.randomUUID().toString(); 
    } 
    public boolean testConnection() { 
     if (randomGenerator.nextInt(10)<3) //randomly make some false. 
      return false; 
     return true; 
    } 

} 

class ConnectionFactoryTest implements ConnectionFactory { 

    public Connection newConnection() { 

     Connection c = new ConnectionTest(); 
     if (c == null) 
      throw new ConnectionException("New connection failed."); 
     System.out.println("New connection: " + c.id); 
     return new ConnectionTest(); 
    } 
} 

,编译器抱怨c没有id。我宣称id是公开的,所以不应该被其他类访问?

回答

1

的编译器检查编译时间c的基准的类型:和因为它是一个Connection引用(Connection类没有id属性),编译失败

此代码应该工作:

ConnectionTest c = new ConnectionTest(); 

一个解决方法为Connection c = new ConnectionTest();工作是定义在连接id成员变量代替。

+0

尽管它是ConnectionTest的一个实例?哦,我明白了,所以类型被首先声明,而构造函数的字段被忽略了? – Mirror318

+0

它们不被“忽略”,它只是JVM的工作方式。它只看到引用('Connection')类型的属性,而不是'ConnectionTest'。 –

+0

您需要将'c'转换为'ConnectionTest'(通常不是个好主意)来访问'id'字段 – k0ner

相关问题