2012-03-12 18 views
0

我是Android新手。我对这个问题非常困惑。例如,有两个java文件。Java Android问题:关键字 - 新

One.java 
Two.java 

我想使用Two.java的一些函数或参数,所以我这样做。

Two two = new Two(); 
two.something; 

或任我可以这样做:

public class One(){ 
    private Two two; 
    public One(Context context){ 
    two = (Two) context; 
    } 
    public void func(){ 
    two.something; 
    } 

或也许像:

public class One(){ 
    Two two; 
    public void func(){ 
    two = new Two(); 
    two.something; 
    } 
} 

什么是这些方法之间的区别还是有什么别的办法吗?谢谢!

回答

0

在这两个类One的示例中,类One的实例包含Two类的一个实例。

如果你的第一个例子(@Serdar指出)two是null。您在第二个示例中解决了这个问题,但每次拨打func()时,都会用新的Two替换旧的Two

另一种选择是在One的构造函数来创建的Two一个实例,特别是如果Two构造要求,可以被传递到的One

public class One 
{ 
    private Two two; 

    public One() 
    { 
     two = new Two(); 
    } 

    public void func() 
    { 
     two.something; 
    } 
} 
0

你的两个实例构造正在做参数非常不同的东西。

让我们考虑例子1:

你必须包含在一个类中的两个类的私有实例。您使用two=(Two)context; 将上下文的实例投射到两个上面这仅在上下文指向类Two的某个对象或源自Two的某个对象时才起作用。此外,它只有在Context本身是层次结构中的基类Two时才有效。否则,你会得到一个ClassCastException。

让我们考虑例子2:

通过这样做two=new Two();您分配两个类的新实例。这与您在示例1中进行的投射不同,因为您认为两个背景实例已经以上下文的形式存在。 此外,行two.something;将访问类2的成员'某事'。它不传递任何参数或调用任何函数。根据什么是(函数或数据成员),您可以在函数中调用它或分配给它。

似乎你需要阅读核心Java。

0

这不是特定于Android的,而是关于Java语言的。既然你问这个问题,我认为你对Java也很新。你会想看看Java教程,特别是的Classes and Objects一章。然而,你在第二个例子中所做的是类型转换,而不是实例化。

欢迎来到Java! :)