我目前面临着对 super
关键字的理解问题。我知道 super
是对特定子类的下一个父类(super class)的引用。不管怎样,我想告诉你我的问题:
public class Father{
int length;
Father(String s){
length = s.length();
}
}
public class Sub extends Father {
char c;
Sub(String s) {
super(s);
c = s.charAt(0);
}
}
super(s)
行在 Sub 类中起什么作用?如果我将 Father 类从公共(public)类更改为抽象类会发生什么?
最佳答案
如果您的方法重写了其父类(super class)的方法之一,则可以通过使用关键字super来调用被重写的方法。 .
如果我们谈论构造函数,那么:
- 使用
super()
,调用父类(super class)无参构造函数; - 通过
super(param list)
,调用具有匹配参数列表的父类(super class)构造函数。
在您的示例中,子类构造函数中的 super(s)
将从父类调用适当的构造函数。
What will happen if I change the Father class from public to abstract?
简短的回答 - 当一个类被声明为抽象时,它不能被实例化:
Father father = new Father("Name"); // Error => 'Father' is abstract;
Father father = new Sub("Name"); // Works, if non-abstract Sub extends Father
关于java - 子类构造函数中的 super 有何作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43305928/