JAVA:如何使用构造函数从另一个类访问私有方法?

时间:2015-02-05 05:34:30

标签: java

所以,我在一个名为Lotion的类中创建了一个方法,并将其命名为read(),此方法采用用户的输入。我的讲师告诉我,方法read()必须是私有的。但是,他说他的demo / tester类应该能够访问方法read()。他给了我们一个提示,说我们必须使用构造函数。但不幸的是,我仍然不明白它应该如何运作。有人可以解释一下。

提前致谢。

5 个答案:

答案 0 :(得分:3)

您当前的代码(在评论中发布)

private void read() {
    System.out.println(
     "Enter the amount of liquid in the bottle (0-100): "); 
     volume = keyboard.nextDouble(); 
     if (volume > MAX || volume < MIN) { read(); } }
}

这会通过设置volume来初始化您的对象。

您可以从类构造函数中调用它:

  public Lotion(){
     read();
  }

这样,当您创建实例时,它会自动询问用户输入并设置实例字段的答案。


一些设计说明(但不要与导师争论):

  • 像用户输入一样的“举重”应该不应该作为构造函数的一部分来完成。
  • 如果你打算从构造函数中调用方法,那么将它们设为私有是一个好主意。否则,它们可以被覆盖,然后将在未完全构造的对象实例上调用。
  • read可以返回double,而不是直接更新对象状态。

答案 1 :(得分:2)

利用反射并使用setAccessible方法访问私有构造函数。

答案 2 :(得分:1)

下面是解决方案。:)下次我想要你做一些编码然后再问......:P

public class Lotion{
        public Lotion(){
            System.out.println(read("Constructor"));
        }

        private String read(String input){
            return input;
        }
    }
    class Tester{
        public static void main(String[] args) {
            new Lotion();
        }
    } 

答案 3 :(得分:0)

  1. 由于您的read()方法是私有的,我们无法直接使用它。
  2. 只是在demo类中创建了lotion类的对象。当我们创建对象时,我们正在调用lotion类的构造函数。
  3. 将用户输入作为该构造函数的参数传递
  4. 内部构造函数调用read()方法。

答案 4 :(得分:0)

我认为您的教师正在暗示可以调用私有方法的位置以及如何构建代码。私有方法只能在同一个类中被调用(默认情况下,不依赖于字节码操作等基础知识技术,甚至是反射,这两者都不是本练习的重点)。这还包括构造函数。如果你再想一想,你应该拥有你需要的一切......