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

时间:2013-09-12 07:40:55

标签: java eclipse

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

class myclass{

public void mymeth(int i,int b){

.....
  }

}

6 个答案:

答案 0 :(得分:1)

myclass类设为public

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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;
   }
}

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

答案 3 :(得分:0)

在您的代码中,myclass具有默认(包级别)访问修饰符。应使用public访问修饰符声明它,以便可以在其包之外访问它。有关详情,请详细了解Controlling Access in Java

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

答案 4 :(得分:0)

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

public class MyChild extends MyClass {

  public void myTestMethod(){
     super.myTestMethod
   }

}

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

即可
MyChild m = new MyChild();

m.myTestMethod();

干杯:)

答案 5 :(得分:0)

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

您可以使用公共类扩展默认类,最终公开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.