如何在不调用其在Java中的构造函数的情况下继承一个类



我在Java中编写一个程序并在继承方面遇到问题。我正在运行的代码具有此结构:

public class BaseClass
{
ObjectInputStream a;
ObjectOutputStream b;
public BaseClass(ObjectInputStream a, ObjectOutputStream b)
{
    this.a = a;
    this.b = b;
}
//Some other code....
Thread subClass = new Thread(new SubClass());
subClass.start();
}

,然后是子类:

public SubClass extends BaseClass implements Runnable
{
    //Code for SubClass...
}

然后,当我编译代码时,我收到的唯一错误是

./SubClass.java:6: error: constructor BaseClass in class BaseClass'
cannot be applied to given types;
public class SubClass extends BaseClass implements Runnable
       ^
  required: ObjectInputStream,ObjectOutputStream
  found: no arguments

我假设问题来自于我正在扩展具有构造函数的基础镜子的事实,因此当我继承班级时会调用它,但我不完全确定。我有没有办法用正确的论点调用该构造函数?或者,更好的是,根本不调用构造函数的一种方法?任何帮助将受到赞赏,并感谢您的回答。

您的子类应具有接入

的构造函数
ObjectInputStream a, ObjectOutputStream b

使用

将其传递给基类
super(a, b):

我相信它看起来像这样:

class Subclass extends BaseClass {
    SubClass(ObjectInputStream a, ObjectOutputStream b) {
        super(a, b);
    }
}

编辑---您不能"不调用"构造函数。即使基类具有默认构造函数(没有参数),它也会隐含从您的子类中调用。

您没有super的呼叫-Parent cunStractor:

public SubClass extends BaseClass implements Runnable
{
    //must implement the following contractor:
    public SubClass(ObjectInputStream a, ObjectOutputStream b /*some other parameters*/){
        super(a,b);
    }
// the rest of the code.....
}

基类没有默认的构造函数,女巫意味着它必须接收一个ObjectInputStream和一个ObjectOutputStream。因此,SubClass必须具有这样的构造函数,或者调用super的构造函数传递。我希望你能:

  1. 查看您的继承
  2. 看看基类是否可以具有默认的构造函数
  3. SubClass中创建一个默认构造函数将null传递到super-> super(null,null)
  4. SubClass中创建一个默认构造函数,传递了所需的两个对象

没有办法调用父构建器。编译器自动将呼叫super添加到您。

继承背后的基本思想是,超类的公共方法和变量将在子类中可用。(不仅仅是此陈述,还需要它,但这应该暂时就足够了)。因此,在您的情况下,当您将基本范围扩展到子类时,您可以在子类中使用两个变量(ObjectInputStream和ObjectOutputStream)。

因此,当您创建子类的对象时,您必须为它们提供一些初始值。因此,您应该在子类中添加以下构造函数。

    public SubClass(ObjectInputStream a,ObjectOutputStream b){
         super(a,b); // The order in super should be same as the order of arguments in your BaseClass constructor! Make a not of this.
    }   

注意:超级()方法中的参数顺序很重要!

创建从另一个类继承的类时,含义之一是您将依靠基类中的某些代码。这意味着您需要正确设置基类。由于您的基类仅具有一个采用参数的构造函数,因此您的类需要提供一个采用相同参数的构造函数,以便它可以初始化其基类。因此,您需要添加一个与基类相同参数的额外构造函数。

最新更新