【问题标题】:How to Run private class method.in same class如何在同一类中运行私有类方法
【发布时间】:2017-02-20 07:10:27
【问题描述】:

可以弄清楚为什么它不允许我运行displaymainMethod,因为它是私有的,即使我知道我可以从同一个班级运行它。有没有办法在不使用反射 API 的情况下做到这一点?

这是错误

Error:(10, 9) java: cannot find symbol
  symbol:   class displayMainMenu
  location: class LoginPrototype

代码

import java.util.*;

public class LoginPrototype {

    public static void main(String[] args) {

        ArrayList<Credentials> allUsers = new ArrayList<Credentials>();
        displayMainMenu mainMenu = new displayMenu();
    }

    private void displayMainMenu() {
        int input;
        do {
            System.out.println("Menu Options");
            System.out.println("[1] Login");
            System.out.println("[2] Register");
            System.out.println("[0] Quit");//5 Displaying Main Menu Options
            Scanner sc = new Scanner(System.in);
            input = sc.nextInt();

            if (input > 2) {
                System.out.println("Please enter a value of [0] - [2]");
            }
            else if (input == 1){
                System.out.println("Login");
            }
            else if (input == 2){
                System.out.println("Register");
            }
            else if (input == 0){
                System.out.println("Thank you. bye.");
            }
        }while(input >= 2);
    }
}

【问题讨论】:

  • 请在您的问题中包含编译器错误。
  • 如果displayMenu()是一个方法,为什么前面有new关键字???要么让它成为一个类,要么让方法返回你想要的类的实例;你不能在一个电话中同时做这两件事。
  • 另外,你不能从 main 调用非静态方法,即使你修复了你的创建语法
  • 错误:(10, 9) java: 找不到符号 symbol: class displayMainMenu location: class LoginPrototype
  • 按照赋值指令

标签: java oop private main


【解决方案1】:

这里有几个问题。

第一个问题是您的通话范围。在main 方法中,您尝试调用需要对象引用的方法。 Main 是静态的, displayMainMenu 不是。所以,为了调用它,你需要实例化封装类的引用。

下一个问题是方法调用。 displayMainMenu() 是一种方法,而不是一种类型。所以new 关键字在这里不适用。

下一个问题是方法的返回类型。 displayMainMenu() 的返回类型为 void。不能将 Void 分配给变量。

尝试将其更改为:

import java.util.*;

public class LoginPrototype {

public static void main(String[] args) {

    ArrayList<Credentials> allUsers = new ArrayList<Credentials>();
    LoginPrototype lp = new LoginPrototype();
    lp.displayMenu();
}

private void displayMainMenu() {
    //Do stuff
}
}

这解决了代码的主要问题。

【讨论】:

  • 导入 java.util.*;公共类 LoginPrototype { public static void main(String[] args) { LoginPrototype main = new LoginPrototype(); main.displayMainMenu(); ArrayList allUsers = new ArrayList(); } private void register(){ handleCredentialInput(ArrayList) = new Credentials(); } }
  • '导入 java.util.*;公共类 LoginPrototype { private void register(){ handleCredentialInput(ArrayList) = new Credentials(); } }'
【解决方案2】:
 displayMainMenu mainMenu = new displayMenu();

这行没有意义。您将函数视为对象。 您应该只调用函数本身:displayMainMenu();

但要公开功能。

【讨论】:

  • @MrA 你到底不能做什么?把displayMainMenu mainMenu = new displayMenu();改成displayMainMenu();或者把displayMainMenu方法改成public?
  • B.Milford 和@MrA 不需要公开这个方法,类可以访问它的任何成员,甚至是私有成员。让它static 更有意义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-03
相关资源
最近更新 更多