我需要在内部类中调用继承的类构造函数。假设我有继承Baseclass的Outerclass,而我在Outerclass内部有一个内部类。从这个内部类的构造函数中,我需要调用BaseClass构造函数?

public class BaseClass {
    public BaseClass (WebDriver driver)
    {
        this.driver =driver;
        PageFactory.initElements(new AjaxElementLocatorFactory(driver, maxTimeOutForElement), this);
    }
}

public class OuterClass extends BaseClass {
    OuterClass (WebDriver driver)
    {
        super(driver)
    }

    //Does something

    public class InnerClass
    {
         InnerClass (WebDriver driver)
         {
             //is there a way  to call Baseclass constructor super(driver)
             //I don't want to call directly new AuthorLoginPage(driver) breaking
             //my constructor chain.
         }
    }
}

最佳答案

答案为:

//is there a way  to call Baseclass constructor super(driver)


没有。注意:InnerClass不是静态的。这意味着:InnerClass的对象不能“独立存在”。创建InnerClass实例的唯一方法是首先创建OuterClass实例。

在可以创建InnerClass对象(正在执行其构造函数代码)的时间点上,调用超类的构造函数毫无意义。因为InnerClass没有超类(除了Object)。调用封闭的OuterClass的构造函数没有任何意义-因为该OuterClass对象已经存在!

或者,通过代码说明:

OuterClass outer = new OuterClass(someDriver);
OuterClass.InnerClass inner = outer.new InnerClass(someDriver);


导致:退后一步,并研究您的模型。乍一看,这没有多大意义。

为了解决OP的注释:InnerClass扩展了Object!它与BaseClass没有直接关系。除了任何InnerClass对象都属于OuterClass对象这一事实,而且该对象扩展了BaseClass

10-07 19:10
查看更多