繁体   English   中英

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

[英]Why can't i access method from another class but can access variable?

我有两个名为 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 传递参数。

问题是这个

abc x= new abc();

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

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

从教程“构建您的第一个应用程序”我们开始了另一个活动,假设您确实想要启动另一个活动。 你需要了解意图; 让我引用那个链接:

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

谢谢你们的评论。 我找到了解决方案。 在类 def 中,我没有使用扩展 Activity

public class def extends abc

制作类“def”子类“abc”。 和线后

super.onCreate(savedInstanceState);

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

super.test("lol123");

这些类是否在同一个包中? (我假设它们在同一个包中,因为你没有公开的String paths

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

路径变量是最终的吗? 您可能希望向其添加public static final修饰符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM