0

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

class myclass{

public void mymeth(int i,int b){

.....
  }

}
4

6 回答 6

1

设置myclass类为public

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

于 2013-09-12T07:42:32.630 回答
0

Set myclass as public then put it in the build path of the class you need to use myclass.

于 2013-09-12T07:44:29.983 回答
0

直接你不能。'public' 让一切都可见。但是如果你看不到类,就很难调用任何东西。然而,

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

PubClass.java

package p1;

class DefClass{
    public void myMeth(){
        System.out.println("from myMeth!");
    }
}

public class PubClass extends DefClass{
    public PubClass(){
        super();
    }
}

主类.java

package p2;

class MainClass {

    public static void main(String[] args) {
        p1.PubClass pub = new p1.PubClass();

        pub.myMeth();
    }

}

输出:

from myMeth!

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

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

主类.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.
于 2014-11-14T06:50:47.057 回答
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;
   }
}

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

于 2013-09-12T07:46:59.200 回答
0

考虑创建另一个与 MyClass 具有相同包名的公共类 MyChild 并从 MyChild 类公开方法

public class MyChild extends MyClass {

  public void myTestMethod(){
     super.myTestMethod
   }

}

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

MyChild m = new MyChild();

m.myTestMethod();

干杯:)

于 2013-09-12T10:24:54.947 回答
0

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

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

于 2013-09-12T08:23:31.443 回答