创建继承class并从父class数组中打印出数据

Create inheritance class and print out data from the parent class array

所以我必须创建一个 class 和获取用户输入的方法以及一个打印它们的方法

在我打印出数字之后。我应该继承 class 并打印出相同的数字,但带有它们的索引, 我如何从第一个 class 获取数字数据?

public class Main {

    public  static void main(String[] args) {
    // write your code here

        OriginalMethod firstoutput = new OriginalMethod();
        firstoutput.OriginalMethod();
        firstoutput.out();
        overki newki = new overki();
        newki.out();


    }
    static class OriginalMethod {
        public int []tomb = new  int[3];
       public void  OriginalMethod(){



           for(int i = 0; i<3;i++)
           {
               Scanner beolvas = new Scanner(System.in);
               System.out.println("Enter the "+(i+1)+".number");
               tomb[i] = beolvas.nextInt();

           }

       }

       public void out()
       {

           for(int i = 0; i<3;i++)
           {
               System.out.print(tomb[i]+" ");

           }
       }

    }
    static class overki extends OriginalMethod {
        @Override
        public void out()
    
        {
            System.out.println();
            for(int i = 0; i<3;i++)
            {
                System.out.println(i+". "+tomb[i]);
    
            }
    
    
        }
    
    }

}

我认为您混淆了 class 和实例(对象)的概念。

看来您只需要一个实例 - subclass。

overki newki = new overki();
newki.OriginalMethod();
newki.out();
newki.out();

看起来方法 OriginalMethod 应该是一个构造函数 - 虚假的 void 是一个常见的错误。所以改变:

public void  OriginalMethod(){

至:

public OriginalMethod() {

并删除行:

newki.OriginalMethod();

这并不是我在 Java 中学习编写 classes 的真正方式(我学会了在项目包中创建新的 Java classes 而不是直接在 Main Class 中创建许多 classes。这将允许您创建构造函数,然后使用 super 关键字或什至通过某些 [= 轻松传递变量31=]getter-setters。但是,对于您提供的代码,我找到的最简单的解决方案是:

public class Main {

    public  static void main(String[] args) {
        int[]tomb;
        OriginalMethod firstoutput = new OriginalMethod();
        tomb = firstoutput.OriginalMethod();
        firstoutput.out(tomb);
        overki newki = new overki();
        newki.out(tomb);
    }

    static class OriginalMethod {
        public int[]  OriginalMethod(){
            int []tomb = new int[3];
            for(int i = 0; i<3;i++)
            {
                Scanner beolvas = new Scanner(System.in);
                System.out.println("Enter the "+(i+1)+".number");
                tomb[i] = beolvas.nextInt();
            }
            return tomb;
        }

        public void out(int[]tomb)
        {
            for(int i = 0; i<3;i++)
            {
                System.out.print(tomb[i]+" ");
            }
        }
    }

    static class overki extends OriginalMethod {
        @Override
        public void out(int[]tomb)
        {
            System.out.println();
            for(int i = 0; i<3;i++)
            {
                System.out.println(i+". "+tomb[i]);
            }
        }
    }
}

请允许我解释一下我所做的更改。首先,我将 int[]tomb 变量移出 OriginalMethod class 并移入 Main。然后,我将 OriginalMethod 更改为 return 一个 int 数组。因此,您可以通过编写 tomb = firstoutput.OriginalMethod() 轻松地将您的数组从 OriginalMethod 中“导出”。从那里,您只需更改 out 方法,以便它们都接收我们在 Main 中创建的数组(因为第二个 out() 方法是 覆盖绝对有必要他们都收到相同的 参数中的东西)。

好吧,它成功了。现在,它是完美的吗?可能不会。正如我所说,如果我自己这样做,我可能会使用 getter-setters,但是从您的原始代码开始,这是我找到的最简单的解决方案!