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

JAVA:如何使用构造函数从另一个类访问私有方法?,java,Java,因此,我在一个名为Lotion的类中创建了一个方法,并将其命名为read()。该方法接受用户的输入。我的导师告诉我read()方法必须是私有的。但是,他说他的demo/tester类应该能够访问read()方法。他暗示我们必须使用构造函数。但不幸的是,我仍然不明白它应该如何工作。有人能解释一下吗 提前谢谢 使用反射并使用setAccessible方法访问私有构造函数。使用反射并使用setAccessible方法访问私有构造函数 因为read()方法是私有的,所以我们不能直接使用它 只需在演示类中

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


提前谢谢

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

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

  • 因为read()方法是私有的,所以我们不能直接使用它
  • 只需在演示类中创建lotion类的对象。在创建对象时,我们调用lotion类的构造函数
  • 将用户输入作为该构造函数的参数传递
  • 在构造函数内部调用read()方法
  • 因为read()方法是私有的,所以我们不能直接使用它
  • 只需在演示类中创建lotion类的对象。在创建对象时,我们调用lotion类的构造函数
  • 将用户输入作为该构造函数的参数传递
  • 在构造函数内部调用read()方法

  • 我认为您的指导老师在暗示可以从何处调用私有方法,以及您应该如何构造代码。只能从同一个类中调用私有方法(默认情况下,不使用隐藏的技术,如字节码操作,甚至反射,这两种技术都不是本练习的重点)。这也包括构造函数。如果你再仔细想想,你应该拥有你所需要的一切…

    我想你的指导老师是在暗示在哪里可以调用私有方法,以及你应该如何构造代码。只能从同一个类中调用私有方法(默认情况下,不使用隐藏的技术,如字节码操作,甚至反射,这两种技术都不是本练习的重点)。这也包括构造函数。如果你再考虑一下,你应该拥有你所需要的一切…

    下面是解决方案。:)下次我希望你在询问之前做一些编码…: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();
            }
        } 
    
    下面是解决方案。:)下次我希望你在问…: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();
            }
        } 
    
    您当前的代码(如评论中所述)

    这样,当您创建实例时,它将自动请求用户输入并将答案设置为实例字段


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

    • 像用户输入这样的“繁重工作”可能不应该作为构造函数的一部分来完成
    • 如果要从构造函数中调用方法,最好将它们设为私有。否则可以重写它们,然后在未完全构造的对象实例上调用它们
    • read
      可以返回一个
      double
      ,而不是直接更新对象状态
    您当前的代码(如评论中所述)

    这样,当您创建实例时,它将自动请求用户输入并将答案设置为实例字段


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

    • 像用户输入这样的“繁重工作”可能不应该作为构造函数的一部分来完成
    • 如果要从构造函数中调用方法,最好将它们设为私有。否则可以重写它们,然后在未完全构造的对象实例上调用它们
    • read
      可以返回一个
      double
      ,而不是直接更新对象状态

    你确定他说的是构造函数还是反射?他说的构造函数可能重复。还有,反射是什么?他可能是说你应该有另一个(公共)方法或构造函数在内部调用私有方法,从而使它可以间接访问。不过,我不确定从构造函数中获取用户输入是否是好的做法。^正如Thilo所说,可能通过
    super
    构造函数……你确定他说的是构造函数还是反射?他说的构造函数可能重复。还有,反射是什么?他可能是说你应该有另一个(公共)方法或构造函数在内部调用私有方法,从而使它可以间接访问。不过,我不确定从构造函数中获取用户输入是否是一种好的做法。^正如Thilo所说,可能是通过
    super
    构造函数……这在初学者的Java课程中不太可能出现。我同意,我怀疑这个练习的重点是使用反射。重点是考虑语言中可用的不同作用域。您不需要使用反射来完成此处要求的操作。初学者Java课程中不太可能出现这种情况。同意,我怀疑此练习的目的是使用反射。重点是考虑语言中可用的不同作用域。您不需要使用反射来完成这里要求的操作。但是我的方法是无效的。它没有参数pass@jiija然后在调用method@jiija...This这只是一个例子。你需要让它根据你的工作,但我的方法是无效的。它没有参数pass@jiija然后在调用method@jiija...This这只是一个例子。你需要让它根据你的东西工作谢谢你,我不知道它会自动要求它。我想我必须像其他方法一样调用它。例如:name.read();好吧,如果你把它放到构造函数中,它会自动完成所有这些。也许我们不应该把它放在那里(有更多的控制权)。但是
      public Lotion(){
         read();
      }