Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Java中的抽象类有构造函数?_Java_Constructor_Abstract Class - Fatal编程技术网

为什么Java中的抽象类有构造函数?

为什么Java中的抽象类有构造函数?,java,constructor,abstract-class,Java,Constructor,Abstract Class,为什么Java中的抽象类有构造函数 当我们不能实例化一个抽象类时,它在构造什么 有什么想法吗?因为另一个类可以扩展它,子类需要调用一个超类构造函数。包括抽象类在内的所有类都可以有构造函数。抽象类构造函数将在实例化其具体子类时被调用。Java中的构造函数实际上并不“构建”对象,用于初始化字段 假设您的抽象类具有字段x和y,并且您总是希望以某种方式初始化它们,而不管最终创建的是什么实际的具体子类。因此,创建一个构造函数并初始化这些字段 现在,如果抽象类有两个不同的子类,当实例化它们时,将调用它们的构

为什么Java中的
抽象
类有
构造函数

当我们不能实例化一个
抽象类时,它在构造什么


有什么想法吗?

因为另一个类可以扩展它,子类需要调用一个超类构造函数。

包括抽象类在内的所有类都可以有构造函数。抽象类构造函数将在实例化其具体子类时被调用。

Java中的构造函数实际上并不“构建”对象,用于初始化字段

假设您的抽象类具有字段x和y,并且您总是希望以某种方式初始化它们,而不管最终创建的是什么实际的具体子类。因此,创建一个构造函数并初始化这些字段

现在,如果抽象类有两个不同的子类,当实例化它们时,将调用它们的构造函数,然后调用父构造函数并初始化字段


如果不执行任何操作,将调用父级的默认构造函数。但是,您可以使用super关键字调用父类上的特定构造函数

在实现方面,您经常会在子类构造函数中看到super()语句,例如:


public class A extends AbstractB{

  public A(...){
     super(String constructorArgForB, ...);
     ...
  }
}


因为抽象类有状态(字段),有时它们需要以某种方式初始化

原因有两个:

1) 抽象类有
构造函数
,当实例化一个具体的子类时,总是调用这些构造函数。我们知道,当我们要实例化一个类时,我们总是使用该类的构造函数。现在,每个构造函数都通过隐式调用
super()
调用其超类的构造函数


2) 我们知道构造函数也用于初始化类的字段。我们还知道抽象类可能包含字段,有时它们需要通过使用构造函数来初始化。我想这个问题的根源在于人们相信调用构造函数可以创建对象。事实并非如此。JavaNowhere声称构造函数调用创建了一个对象。它只是做了我们想让构造函数做的事情,比如初始化一些字段……仅此而已。因此,一个抽象类的构造函数被调用并不意味着它的对象被创建。

请检查这个问题以获得澄清,您需要一种方法来构造抽象类的子类。从技术上讲,抽象类上的公共构造函数实际上只是一个受保护的构造函数。Debmalya Das(SCJP和SCWCD)通常,如果您考虑构造函数链接的理论,那么在子构造函数执行
之前首先调用父构造函数,如果您的抽象类有两个不同的子类,当您实例化它们时,它们的构造函数将被调用,然后父构造函数将被调用,字段将被初始化。
您是说第一个子类的构造函数将被调用每次它都是这样运行的-
父构造函数
->
父构造函数
->
子构造函数
@陌生人“在子构造函数执行之前首先调用父构造函数”我想知道更多关于这一点,并学习java构造函数链接的理论。你有什么有用的链接或电子书之类的吗?