多个子类,相似但不同

时间:2014-05-26 20:03:28

标签: java oop

我有2个相似的类,一个接收1个参数(让我们说int类型),另一个接收相同类型的参数两次。对于这两个输入,我需要进行相同的检查(如果数据不好则抛出异常)并且这两个类都有一些功能。

我想创建的超类型将有2个构造函数,一个带有1个参数,另一个带有2个参数。这将有效,但问题是,如果有三个或更多参数的选项,应该怎么做。

所以如果有更好的选择,我想在这里试试。

感谢。

1 个答案:

答案 0 :(得分:1)

  

如果可以选择有三个或更多参数,应该怎么做?

尝试使用Varargs,它需要使用任意数量的值来创建数组,并在调用方法/构造函数之前将值放入数组中。

阅读Eclipse中Varargs的章节。


Java变量参数

arargs是一种辅助语法,它允许在方法调用中使用可变数量的参数。在方法定义中,变量aruguments由 elipsis(...)表示,在java语言规范中称为variable arity methodvariable arity parameter。在调用varargs方法时,我们可以使用任意数量的指定类型的参数,并用逗号分隔。

Varargs Sample

public class VarArgSample {

    static int sum(int i, int... marks) {
        int total = 0;
        for (int mark : marks) {
            total = total + mark;
        }
        return total;
    }

    public static void main(String[] args) {

        // invoking with variable arguments
        System.out.println(sum(1, 2, 3));

        // same invocation using an array
        int arr[] = { 2, 3 };
        System.out.println(sum(1, arr));
    }
}

Varargs如何运作?

当使用变量参数调用时,编译器将参数列表从左到右与形式参数匹配。一旦匹配了初始参数集,那么剩下的任何参数都被构造为数组并传递给该方法。

在给定的示例中,值'1'作为变量'i'的参数传递,然后除了varargs之外没有剩余的其他参数。所以剩下的值'2,3'被构造为数组并作为参数传递。这就是动力的实现方式。


溶液

在您的情况下,可以选择使用三个或更多参数,然后只需使用

MyClass(int i, int j, int... k){}