我是一个java新手,谷歌搜索对我没有帮助。所以,请原谅我...:P
我创建了一个包acs
。这个包有类Gets
,类Gets
有方法foo()
。
现在,我在同一个包中创建了另一个类,并尝试调用方法foo()
。当然,(new Gets()).foo();
也能工作。
但是我添加了一个导入import acs.Gets;
,并简单地尝试直接使用http://docs.oracle.com/javase/tutorial/java/package/usepkgs.html中描述的方法foo();
。但不幸的是,代码没有工作。请告诉我哪里出错了。任何帮助将不胜感激!
6条答案
按热度按时间oxalkeyp1#
只能从另一个类导入静态函数;例如,这将起作用:
然后将其导入:
如果它不是静态的,那么你就不能导入它。
**EDIT:**正如在注解中指出的,使用静态导入会使代码更难阅读,所以应该谨慎使用。如果使用正确,它们会很有用。
c0vxltue2#
将foo()方法设置为静态,并使用classname.foo()访问它;
um6iljoc3#
你不能访问另一个类的方法而没有它的对象,无论这两个类是否存在于同一个包中。
xyhw6mcr4#
Java是面向对象的,你需要创建一个类的对象来调用类的方法。
比如说
new Gets().myFunction();
这个规则的唯一例外是创建一个
static
方法。你可以知道什么时候创建静态方法,以及它们是否适合你的要求,但是要访问一个类的方法,你需要一个对象。wz1wpwve5#
您仍然需要创建一个对象来访问非静态方法:
而且您仍然需要声明类来访问静态方法:
你不需要从 * 同一个包 * 中导入一个类。这是多余的,因为包中的所有类都是可见的。
同样,你也弄不清导入是如何工作的。导入一个类**并不意味着它的方法或字段可以不加限制地访问。
从 * 另一个包 * 导入类的原因是,这样就不必在代码中到处声明包。
你可以简单地写:
ca1c2owp6#
有3种方法可以解决这个问题。
1.您的导入允许将示例(非静态)方法与Gets类的Object结合使用,如下所示:
随机变量=新的Gets();或者随机获取=新获取();/这两个函数具有相同的效果。/
//然后使用如下方法:
random.foo () or System.out.print( random.foo ());
/取决于您的方法返回的是Primitive Type还是Void及其函数。/
1.解决这个问题的第二种方法是将foo()设置为静态方法,这样它就变成了类方法,并将其设置为"default"或"public",以便简单地使用类名和方法名来调用它。
Gets.foo(); //simple as that
1.解决这个问题的第三种方法是在你的第二个类上使用"extends"关键字,使它成为Gets类的子类。这允许你继承Gets类的所有方法,并且在不导入和不创建Gets类的对象的情况下使用它们。像这样:
公共类acs扩展Gets {
公共静态void main(String []参数){
/在没有对象或类引用的情况下调用了方法。/
foo();
}//结束Main()
}//结束acs()类