为什么我不能从另一个类访问方法但可以访问变量?

时间:2019-07-07 10:04:02

标签: java android class object methods

我有两个名为abc和def的类。 abc类具有名为“ paths”的字符串和名为“ test”的函数。我可以轻松地使用另一个类“ def”中的变量“ paths”,但似乎无法从类“ def”中调用函数“ test”。

我已经在def类中创建了一个abc类的对象,并试图调用该函数,但是它不起作用。

public class abc extends Activity {
    String paths="path";
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        test("lol");
    }
    public void test(String name){
        Toast.makeText(abc.this,name,Toast.LENGTH_LONG).show();
    }
}

public class def extends Activity {
abc x= new abc();
String paths=x.paths;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Toast.makeText(def.this,paths,Toast.LENGTH_LONG).show();// This is 
    //working
    x.test("hahahas"); // Not working
    }
}

我希望abc类的“测试”方法由def类传递参数def来使用。

3 个答案:

答案 0 :(得分:0)

问题是这个

abc x= new abc();

您不应创建以这种方式扩展Activity的对象的实例。您应该使用startActivitystartActivityForResult

此外,您根本不应该在另一个活动的实例中保存对一个活动的引用,因为活动是由Android创建和销毁的,因此您持有的活动可能会过时。参见Android Activity Lifecycle`。只需旋转设备就足以实现这一目标。

在教程“构建您的第一个应用”中,我们有start another activity,假设您确实想启动另一个活动。您需要了解意图;让我引用该链接:

  

Intent是一个对象,它在单独的组件(例如两个活动)之间提供运行时绑定。意图表示应用程序的“意图做某事”。

答案 1 :(得分:0)

感谢您的所有评论。我找到了解决方案。在def类中,我没有使用

来扩展Activity

public class def extends abc

使类“ def”成为“ abc”的子类。然后在行

super.onCreate(savedInstanceState);

在“ def”类中,我添加了下面显示的一行来完成这项工作。

super.test("lol123");

答案 2 :(得分:-1)

这些类在同一包中吗? (我假设它们在同一个程序包中,因为您没有String paths的公共入口)

如果某个方法是公共的,则应该可以从任何地方调用它。 所以我想您的测试用例有问题。 尝试使用不扩展Activity且仅具有测试所需方法的类。然后,进一步扩展测试用例,直到停止工作。

路径变量是否为final? 您可能要向其中添加public static final修饰符。