如何在使用super()调用定义此构造函数的块中调用具有不同参数的构造函数?

时间:2013-09-17 05:18:16

标签: java

我有一种情况,我必须这样做

 class A{

    B b;

    class B extends ContainerView{

    public B(int x,int y, String s1, Styring s2){
    super(x,y,200,500);

    }
    }

    class C{

    void m(){
    if(...){
    B b=new B(x,y,raj,esh);
    b.something....
    else
    B b=new B(x,y,esh,raj);

问题是x和y对于C类是未知的,如果我在C类中将其声明为int x,y,那么它的行为是不正确的......

怎么办?在此先感谢

2 个答案:

答案 0 :(得分:0)

查看Java inner class and static nested class

class OuterClass {
    ...
    class InnerClass {
        ...
    }
}

OuterClass.InnerClass innerObject = outerObject.new InnerClass();

答案 1 :(得分:0)

这里的问题是您对类的使用或类构造函数API是错误的。

在致电public B(int x,int y, String s1, String s2)时,您提供了两个选项,xy未知。

第一个选项是在那里传递null或者一个默认值(因为在这种情况下参数是int,默认值可以是0或类似-1)。您正在创建的类应该知道这些值可能为null或包含无效/默认值。但这是一个补丁。

如果设计得当且xy参数是可选的,则应包含一个反映public B(String s1, String s2)

的构造函数

第二个选项是在那里创建该特定对象,如果xy未知且这些参数不是可选的。您已将其放置在不存在用于创建对象的关键上下文参数的错误位置。