我怎样才能从班级a调用班级b的考试方法

时间:2013-06-26 10:48:00

标签: java methods method-call

class B {

    private B() {}

    public void test() {
       System.out.println("hello");
    }
}

public class A {
    public static void main(String[] args) {}
}

4 个答案:

答案 0 :(得分:1)

由于test是一个实例方法,因此您需要使用类B的对象来调用该方法。您已将类B的构造函数声明为私有,因此您将无法使用B运算符在类B之外创建new的对象。您可以使用Reflection:

Constructor<B> constructor=B.class.getDeclaredConstructor(); 
constructor.setAccessible(true);  
B b = constructor.newInstance(); 
b.test();

答案 1 :(得分:0)

选项1(需要更改类构造函数签名):创建类B构造函数,可访问,即 private。然后,创建B的实例并调用方法:

public static void main(String[] args) {
    B b = new B();
    b.test();
}

选项2(需要更改方法签名):制作test()方法static

public static void test() {
    System.out.println("hello");
}

然后你可以在没有事先实例化的情况下调用:

public static void main(String[] args) {
    B.test();
}

选项3(无需更改代码):使用反射

method = B.getClass().getDeclaredMethod("test");
method.setAccessible(true);
method.invoke(object);

答案 2 :(得分:0)

你在这里创建一个私有构造函数,这意味着你不能在类B之外实例化类B.使它public然后按照darijan回答

  class B {

    public B() {}

    public void test() {
       System.out.println("hello");
    }
}

public class A {
    public static void main(String[] args) {
       B b = new B();
       b.test();
    }

  }

答案 3 :(得分:0)

如果要访问必须将构造函数更改为public的测试方法,则无法实例化ClasB,因为它具有私有构造函数。如果那不是你的要求 1.您可以使用reflection来访问该方法      或
2.如果您的测试方法定义不依赖于对象,则可以使该方法为静态,并按类名

进行访问