【问题标题】:why the main method is printing nothing in the sub class?为什么主要方法在子类中不打印任何内容?
【发布时间】:2019-10-14 09:33:39
【问题描述】:

“mysecondclass”是超类“myfirstclass”的子类 应该继承超类“myfirstclass”的所有属性 它应该输出 x 的值,但它什么也不打印

package myfirstproject;

public class myfirstclass {
    protected int x = 10;
    //getter 
    public void getX() {
     System.out.println(x);
    }
    public static void main(String[] args) { 
/* it asked me to define this main method here although it's useless in this situation 
   */
    }
}
class mysecondclass extends myfirstclass {
    public static void main(String[] args) {
    mysecondclass mysecondobject = new mysecondclass();
    mysecondobject.getX(); //prints nothing 
    }
}

我真的是 Java 新手,实际上我还在学习它的基础知识 我也不知道为什么它总是要求我在超类中添加主方法,尽管我已经在子类中声明了一个(我听说一个主方法对于一个 java 文件就足够了) 任何帮助都非常感谢,在此先感谢

【问题讨论】:

  • 你是怎么运行这个的?
  • 在Java中,通常我们只需要一个main方法作为公共类的入口,类名也是文件名。所以你只需要将你的主要方法从子类移动到父类。你会没事的。
  • @yuanqingfei 您可以在任何您喜欢的类中定义主要方法,只要它不是内部类(这两个类都不是)。
  • mysecondclass 中的 main 方法是静态的,因此它实际上并不是用于覆盖第一类中的(静态)方法。当您说“它总是要求我添加 main 方法”时,是谁?或者它是什么?
  • @AndyTurner 我知道,我说ususally,在他的例子中,你可以看到只有一个公共类。这意味着它是主要课程。而当你尝试调用 main 方法时,它只会找到主类的 main 方法。至于同一个 java 文件中的所有其他类,它们都没有用。

标签: java


【解决方案1】:

你不了解函数

public static void main(String[] args)

在 Java 文档中:

public static void 关键字表示 Java 1 虚拟机 (JVM) 解释器可以调用程序的main方法来启动程序 (公共)而不创建类的实例(静态),并且 程序在执行时不向 Java VM 解释器 (void) 返回数据 结束。

你有两个

public static void main(String[] args)

在两个不同的班级!您正在运行或编译使用 myfirstclass 的示例或测试,因此对于此类示例或测试,最好只有一个 Java 类 Main

public class Main {
    public static void main(String[] args) {
        // Call Your classes
    }
}

让您的代码更加整洁有序!

还有一件事。对于通过命令行运行使用这种类型的命令

java MyApp arg1 arg2

如有疑问,请始终read the Docs!

【讨论】:

    【解决方案2】:

    您有两种方法可以让您的代码按您的意愿运行

    1) 创建 2 个 java 文件。一个是 myfirstclass.java,第二个是 mysecondclass.java。每个人都有自己的主要课程。因此,您可以根据需要启动任何主要方法。

    2) 只需将这 2 个类保存在同一个 java 文件中。那么当你运行它时,它只会在公共类中默认运行main方法。

    【讨论】:

    • "默认只在公共类中运行main方法。" Java 不要求 main 方法位于公共类中,默认情况下也不运行任何类。 Java 运行您告诉它运行的类。如果调用java myproject.myfirstclass,它将运行该类中的主方法;如果你调用java myproject.mysecondclass,它会运行那个类的main方法。
    • @AndyTurner 您在 Eclipse 中尝试过吗?如果你没有在公共类中定义主方法,你就没有机会在第二类中运行主方法。如果他使用命令行,我同意你的看法。
    【解决方案3】:

    只需将 public 关键字更改为第二类。如果您使用的是在线编译器,他们通常会在公共类中查找 main 方法。

    package myfirstproject;
    
     class myfirstclass {
        protected int x = 10;
        //getter 
        public void getX() {
         System.out.println(x);
        }
    
    }
    public class mysecondclass extends myfirstclass {
        public static void main(String[] args) {
        mysecondclass mysecondobject = new mysecondclass();
        mysecondobject.getX(); //printx X
        }
    }
    

    【讨论】:

    • 没有。因此他需要更改他的 java 文件名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2019-02-20
    • 2017-04-04
    • 1970-01-01
    相关资源
    最近更新 更多