当有人在继承自抽象 class 的 class 的构造函数中调用 super 时会发生什么?
what happen when somebody calls super in constructor of a class that inherit from abstract class?
我想知道当有人在继承自抽象 class 的 class 的构造函数中调用 java super()
方法时真正发生了什么。正如我们所知,抽象 class 无法实例化,但 super
调用抽象 class.
的构造函数
举个例子
public abstract class Figure { // cant be instantiated
private type firstAttribute;
private type secondAttribute;
public Figure(type firstAttribute, type secondAttribute) {
this.fisrtAttribute = fisrtAttribute;
this.fisrtAttribute = fisrtAttribute;
}
protected abstract void anyMethod();
}
class Rectangle extends Figure {
public Rectangle(type firstAttribute, type secondAttribute) {
/*
* call the abstract class constructor but we know, a
* constructor is used to
* instantiate class and we can't instantiate an abstract class
*/
super(firstAttribute, secondAttribute);
// then what really happen ?
}
@override
....
}
我在它调用的构造函数中执行代码。
不需要为此创建抽象实例 class;毕竟,在构造函数调用期间,class 的实例从未创建过。
抽象基础class初始化了你在具体继承class中继承的任何属性,所以你可以避免初始化中的代码重复
混淆源于这样一个事实,即调用 super()
构造函数实际上并没有实例化超级 class。它只是调用 super()
构造函数。不多也不少。
这意味着调用super()
时会调用超级构造函数中的代码。 abstract classes 不能实例化是正确的,但是从 subclass 构造函数调用超级构造函数不算实例化。
我想知道当有人在继承自抽象 class 的 class 的构造函数中调用 java super()
方法时真正发生了什么。正如我们所知,抽象 class 无法实例化,但 super
调用抽象 class.
举个例子
public abstract class Figure { // cant be instantiated
private type firstAttribute;
private type secondAttribute;
public Figure(type firstAttribute, type secondAttribute) {
this.fisrtAttribute = fisrtAttribute;
this.fisrtAttribute = fisrtAttribute;
}
protected abstract void anyMethod();
}
class Rectangle extends Figure {
public Rectangle(type firstAttribute, type secondAttribute) {
/*
* call the abstract class constructor but we know, a
* constructor is used to
* instantiate class and we can't instantiate an abstract class
*/
super(firstAttribute, secondAttribute);
// then what really happen ?
}
@override
....
}
我在它调用的构造函数中执行代码。
不需要为此创建抽象实例 class;毕竟,在构造函数调用期间,class 的实例从未创建过。
抽象基础class初始化了你在具体继承class中继承的任何属性,所以你可以避免初始化中的代码重复
混淆源于这样一个事实,即调用 super()
构造函数实际上并没有实例化超级 class。它只是调用 super()
构造函数。不多也不少。
这意味着调用super()
时会调用超级构造函数中的代码。 abstract classes 不能实例化是正确的,但是从 subclass 构造函数调用超级构造函数不算实例化。