我如何访问包外的默认类的公共方法

我有一个没有修饰符的类(默认),它有一个名为mymeth的公共方法。 我知道当我在包内时我可以访问该方法。 但是,当我在包外时,我想访问该方法。 有没有人知道如何做到这一点。 理论上我认为它应该是可能的,因为公共方法意味着世界的访问。 这是我的类和方法的示例:

class myclass{ public void mymeth(int i,int b){ ..... } } 

 public interface SomeInterface{ public void mymeth(); } class MyClass implements SomeInterface{ public void mymeth(){ } } //is in the same package as MyClass public MyClassFactory{ public SomeInterface create(/*parameters*/){ //create instance from parameters //For your case MyClass instanceOfAnyClassThatImplementsSomeInterface = new MyClass(/*pass the parameters*/); return instanceOfAnyClassThatImplementsSomeInterface; } } 

其中一种方法已在答案中定义,但如果要限制类的公共访问,则可以创建一个接口并通过它访问该方法。

myclass类设置为public

**仅供参考,Java中的类从大写字母开始

myclass设置为public然后将其放在需要使用myclass的类的构建路径中。

在您的代码中, myclass具有默认(包级别)访问修饰符。 应使用public访问修饰符声明它,以便可以在其包外部访问它。 有关详细信息,请阅读有关使用Java控制Access的更多信息。

作为旁注,Java标准要求您将类名中的每个单词大写,因此您应该使用MyClass 。 我向您推荐Java约定文档 。

考虑使用与MyClass相同的包名创建另一个公共类MyChild,并从MyChild类公开该方法

 public class MyChild extends MyClass { public void myTestMethod(){ super.myTestMethod } 

}

现在,在您要使用该方法的类中,只需使用MyChild类的实例即可

 MyChild m = new MyChild(); m.myTestMethod(); 

干杯:)

直接你不能。 ‘公共’使一切都可见。 但是如果你看不到这个课程,就很难打电话给任何人。 然而,

您可以使用公共类扩展默认类,最终公开myMeth。

PubClass.java

 package p1; class DefClass{ public void myMeth(){ System.out.println("from myMeth!"); } } public class PubClass extends DefClass{ public PubClass(){ super(); } } 

MainClass.java

 package p2; class MainClass { public static void main(String[] args) { p1.PubClass pub = new p1.PubClass(); pub.myMeth(); } } 

输出:

 from myMeth! 

一个真正实际的用途是,在这个隐藏的类中重写一个公知的方法。 您可以在隐藏类中实现公共方法,因此世界可以调用您的公共方法(而不是公共实现),而不会暴露类。 例如,DefClass在这里覆盖了Object类的公共方法:

PubClass.java

 package p1; class DefClass{ public String toString(){ return "DefClass here. Trying to explain a concept."; } } public class PubClass extends DefClass{ public PubClass(){ super(); } } 

MainClass.java

 package p2; class MainClass { public static void main(String[] args) { p1.PubClass pub = new p1.PubClass(); System.out.println(pub.toString()); } } 

输出:

 DefClass here. Trying to explain a concept.