有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用扫描器的Java构造函数的继承

我是一名刚开始学习Java的本科生。这个问题源于创建事件模拟器的任务,但我将只展示我遇到问题的代码部分,特别是构造函数

我打算创建一个队列对象和一个从同一队列对象继承的PriorityQueue对象,因为我想使用队列对象的函数。我打算在一个名为QueueManager的类中创建它们,但现在的问题是我想在队列(父类)的构造函数中使用一个扫描程序,但我只想创建一个空的PriorityQueue(子类)对象而不进行扫描

来自编译器的错误消息

error: constructor Queue in class Queue cannot be applied to given types;
    public PriorityQueue(){
                          ^
  required: String[]
  found: no arguments
  reason: actual and formal argument lists differ in length

这样做的方法是什么,或者它是一个好的程序设计吗

Queue Manager

class QueueManager{
    private PriorityQueue p;
    private Queue q;

    public QueueManager(String [] args){
        this.q=new Queue(args);
        this.p=new PriorityQueue();
    }

Queue

import java.util.Scanner;

class Queue{
    protected Event [] events =new Event [100];
    private int start=0;
    private int end=0;
    protected int size=0;
    private double time=0;


    public Queue(String [] args){
        Scanner s= new Scanner(System.in);
        int pos=0;
        while (s.hasNextDouble()){       
            double j=s.nextDouble();
            Event arrives=new Event("arrives",new Customer(j));
            this.events[pos]=arrives;
            pos++;
        }
        this.end=pos-1;
        this.size=pos;
    }

PriorityQueue

class PriorityQueue extends Queue{
    private double totaltime=0;
    private int totalsize=0;

    public PriorityQueue(){
    }; 

PS:我来自Python背景,在那里学习了一些OOP(看起来有点矫揉造作),没有强调编程设计实践。如果有人从Python和OOP编程设计技巧中获得了一些关于Java的硬性规则,欢迎分享。谢谢


共 (1) 个答案

  1. # 1 楼答案

    如果你定义了一个接受参数的构造函数,你就不会再免费得到一个无能量的构造函数了。因此,您正在调用一个不存在的构造函数,这正是编译器所抱怨的

    这里不使用传递到队列构造函数中的参数,只需从构造函数定义中删除参数。如果两者都需要,那么必须定义单独的构造函数,一个不带参数,另一个带String[]参数

    对于关注点分离:队列构造函数中的内容实际上属于单独的测试工具脚本,而不是特定于队列本身