Java 当没有任何内容被重写时,为什么我会收到构造函数中可重写方法调用的警告?

Java 当没有任何内容被重写时,为什么我会收到构造函数中可重写方法调用的警告?,java,netbeans,Java,Netbeans,我收到警告“承包商中的可覆盖方法调用”,我不知道为什么。该类不扩展或实现任何内容。当我点击警告时,建议是 1.期末考试 2.最后确定方法 3.使方法保持静态 4.使方法私有化 为什么会发生这种情况?我该怎么办?以下是相关代码: import java.util.Random; public class Tester { public Tester(int minLength, int maxLength, int minValue, int maxValue) {

我收到警告“承包商中的可覆盖方法调用”,我不知道为什么。该类不
扩展
实现
任何内容。当我点击警告时,建议是 1.期末考试 2.最后确定方法 3.使方法保持静态 4.使方法私有化

为什么会发生这种情况?我该怎么办?以下是相关代码:

import java.util.Random;

public class Tester {

    public Tester(int minLength, int maxLength, int minValue, int maxValue)
    {
        rand = new Random();
        int[] randData = generateArray(minLength, maxLength, minValue, maxValue);//overridable method call in constructor
        procArr = new DataManager(randData);
        doTests();//overridable method call in constructor
    }

    public void doTests()
    {
        procArr.sort();
    }

    public int[] generateArray(int minLenght, int maxLength, int minVal, int maxVal)
    {
        final int length = getRandomVal(minLenght, maxLength);
        int arr[] = new int[length];
        for(int i = 0; i < length; i++)
            arr[i] = getRandomVal(minVal, maxVal);
        return arr;
    }


    private int getRandomVal(int min, int max)
    {
        int n = max - min + 1;
        int i = rand.nextInt(n);
        return min + i;
    }


    final private Random rand;
    final private DataManager procArr;
}
import java.util.Random;
公共类测试员{
公共测试仪(int minLength、int maxLength、int minValue、int maxValue)
{
rand=新随机数();
int[]randData=generatarray(minLength,maxLength,minValue,maxValue);//构造函数中的可重写方法调用
procArr=新数据管理器(randData);
doTests();//构造函数中的可重写方法调用
}
公共空间测试()
{
procArr.sort();
}
public int[]generatarray(int minLenght,int maxLength,int minVal,int maxVal)
{
最终整数长度=getRandomVal(最小长度,最大长度);
int arr[]=新的int[长度];
for(int i=0;i
因为它是可重写的。让它成为私人的或最终的

private int[] generateArray(int minLenght, int maxLength, int minVal, int maxVal)
{
    final int length = getRandomVal(minLenght, maxLength);
    int arr[] = new int[length];
    for(int i = 0; i < length; i++)
        arr[i] = getRandomVal(minVal, maxVal);
    return arr;
}
private int[]generatarray(int minLenght,int maxLength,int minVal,int maxVal)
{
最终整数长度=getRandomVal(最小长度,最大长度);
int arr[]=新的int[长度];
for(int i=0;i
警告并不是抱怨您重写了一个方法。这是在抱怨别人可以。这对CTOR来说是不好的,因为从那时起,您的CTOR将调用一个方法,该方法做了上帝知道的事情。通常,从CTOR调用的方法是私有的。有时你希望它们是公开的,所以如果它们是公开的,也要将它们定为最终版本

编辑:Re。您的问题“我注意到将final放在方法签名的什么位置并不重要,例如public final void doTests()或final public void doTests()。是否有首选方法?”

有。Java语言规范

  • 注释
  • 公共的、受保护的或私人的
  • 抽象静态最终同步本机strictfp

  • 因为它是可重写的。让它成为私人的或最终的

    private int[] generateArray(int minLenght, int maxLength, int minVal, int maxVal)
    {
        final int length = getRandomVal(minLenght, maxLength);
        int arr[] = new int[length];
        for(int i = 0; i < length; i++)
            arr[i] = getRandomVal(minVal, maxVal);
        return arr;
    }
    
    private int[]generatarray(int minLenght,int maxLength,int minVal,int maxVal)
    {
    最终整数长度=getRandomVal(最小长度,最大长度);
    int arr[]=新的int[长度];
    for(int i=0;i
    警告并不是抱怨您重写了一个方法。这是在抱怨别人可以。这对CTOR来说是不好的,因为从那时起,您的CTOR将调用一个方法,该方法做了上帝知道的事情。通常,从CTOR调用的方法是私有的。有时你希望它们是公开的,所以如果它们是公开的,也要将它们定为最终版本

    编辑:Re。您的问题“我注意到将final放在方法签名的什么位置并不重要,例如public final void doTests()或final public void doTests()。是否有首选方法?”

    有。Java语言规范

  • 注释
  • 公共的、受保护的或私人的
  • 抽象静态最终同步本机strictfp

  • 因为它是可重写的。让它成为私人的或最终的

    private int[] generateArray(int minLenght, int maxLength, int minVal, int maxVal)
    {
        final int length = getRandomVal(minLenght, maxLength);
        int arr[] = new int[length];
        for(int i = 0; i < length; i++)
            arr[i] = getRandomVal(minVal, maxVal);
        return arr;
    }
    
    private int[]generatarray(int minLenght,int maxLength,int minVal,int maxVal)
    {
    最终整数长度=getRandomVal(最小长度,最大长度);
    int arr[]=新的int[长度];
    for(int i=0;i
    警告并不是抱怨您重写了一个方法。这是在抱怨别人可以。这对CTOR来说是不好的,因为从那时起,您的CTOR将调用一个方法,该方法做了上帝知道的事情。通常,从CTOR调用的方法是私有的。有时你希望它们是公开的,所以如果它们是公开的,也要将它们定为最终版本

    编辑:Re。您的问题“我注意到将final放在方法签名的什么位置并不重要,例如public final void doTests()或final public void doTests()。是否有首选方法?”

    有。Java语言规范

  • 注释
  • 公共的、受保护的或私人的
  • 抽象静态最终同步本机strictfp

  • 因为它是可重写的。让它成为私人的或最终的

    private int[] generateArray(int minLenght, int maxLength, int minVal, int maxVal)
    {
        final int length = getRandomVal(minLenght, maxLength);
        int arr[] = new int[length];
        for(int i = 0; i < length; i++)
            arr[i] = getRandomVal(minVal, maxVal);
        return arr;
    }
    
    private int[]generatarray(int minLenght,int maxLength,int minVal,int maxVal)
    {
    最终整数长度=getRandomVal(最小长度,最大长度);
    int arr[]=新的int[长度];
    for(int i=0;i
    警告并不是抱怨您重写了一个方法。这是在抱怨别人可以。这对CTOR来说是不好的,因为从那时起,您的CTOR将调用一个方法,该方法做了上帝知道的事情。通常,从CTOR调用的方法是私有的。有时你希望它们是公开的,所以如果它们是公开的,也要将它们定为最终版本

    编辑:Re。您的问题“我注意到将final放在方法签名的什么位置并不重要,例如public final void doTests()或final public void doTests()。是否有首选方法?”

    有。Java语言规范

  • 注释
  • 公共的、受保护的或私人的
  • 抽象静态最终同步本机strictfp

  • 通常,您根本不希望任何人更改您的构造函数。您在代码中所做的是允许他们

    当有人对您的类进行子类化并调用super(int,int,int,int)doTests()时;在子类上调用call