java从同一软件包导入

p8ekf7hl  于 2023-01-24  发布在  Java
关注(0)|答案(6)|浏览(131)

我是一个java新手,谷歌搜索对我没有帮助。所以,请原谅我...:P
我创建了一个包acs。这个包有类Gets,类Gets有方法foo()
现在,我在同一个包中创建了另一个类,并尝试调用方法foo()。当然,(new Gets()).foo();也能工作。
但是我添加了一个导入import acs.Gets;,并简单地尝试直接使用http://docs.oracle.com/javase/tutorial/java/package/usepkgs.html中描述的方法foo();。但不幸的是,代码没有工作。请告诉我哪里出错了。任何帮助将不胜感激!

oxalkeyp

oxalkeyp1#

只能从另一个类导入静态函数;例如,这将起作用:

public class Gets {
    public static void foo() {}
}

然后将其导入:

import static acs.Gets.foo;

如果它不是静态的,那么你就不能导入它。

**EDIT:**正如在注解中指出的,使用静态导入会使代码更难阅读,所以应该谨慎使用。如果使用正确,它们会很有用。

c0vxltue

c0vxltue2#

将foo()方法设置为静态,并使用classname.foo()访问它;

um6iljoc

um6iljoc3#

你不能访问另一个类的方法而没有它的对象,无论这两个类是否存在于同一个包中。

xyhw6mcr

xyhw6mcr4#

Java是面向对象的,你需要创建一个类的对象来调用类的方法。
比如说
new Gets().myFunction();
这个规则的唯一例外是创建一个static方法。你可以知道什么时候创建静态方法,以及它们是否适合你的要求,但是要访问一个类的方法,你需要一个对象。

wz1wpwve

wz1wpwve5#

您仍然需要创建一个对象来访问非静态方法:

(new Gets()).foo();

而且您仍然需要声明类来访问静态方法:

Gets.staticFoo();

需要从 * 同一个包 * 中导入一个类。这是多余的,因为包中的所有类都是可见的。
同样,你也弄不清导入是如何工作的。导入一个类**并不意味着它的方法或字段可以不加限制地访问。
从 * 另一个包 * 导入类的原因是,这样就不必在代码中到处声明包。

acs.anotherpkg.Blah testblah = new acs.anotherpkg.Blah();

你可以简单地写:

import acs.anotherpkg.Blah;
...
Blah testblah = new Blah();
ca1c2owp

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()类

相关问题