我目前正面临super
关键字的理解问题。我知道super
是对特定子类的下一个超类的引用。无论如何,我想告诉你我的问题:
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类中做了什么?如果我将父类从公开更改为抽象,会发生什么?
答案 0 :(得分:2)
如果您的方法覆盖了其中一个超类的方法,则可以通过使用关键字super来调用重写的方法。
如果我们谈论的是构造函数,那么:
super()
,调用超类无参数构造函数; super(param list)
,调用具有匹配参数列表的超类构造函数。在您的示例中,{1}}在Sub类构造函数中将从父类调用适当的构造函数。
如果我将Father类从public更改为abstract,会发生什么?
简短回答 - 当一个类被声明为abstract时,它无法实例化:
super(s)
答案 1 :(得分:1)
如果我将父类从公开更改为抽象,会发生什么?
如果你将父类抽象化,那么你就有机会添加抽象方法。
由于抽象类可能有也可能没有抽象方法,所以在你的代码中使父类抽象不会给出任何错误。
该行" super(s)"在Sub类
中做
它调用了父类的参数化构造函数。即使你没有明确地调用父类的构造函数,父的默认构造函数也是如此。课程将被调用。
答案 2 :(得分:0)
super
关键字始终用于引用超类。
super(s)
表示调用具有匹配参数的超类构造函数。
所以当你调用super(s)
时,它会调用超级构造函数
Father(String s){
length = s.length();
}
答案 3 :(得分:0)
public class Sub extends Father {
char c;
Sub(String s) {
super(s);
c = s.charAt(0);
System.out.println(c);
}
}
public class Sub extends Father {
char c;
Sub(String s) {
super(s);
c = s.charAt(0);
System.out.println(c);
}
}
public class MainClass {
public static void main(String[] args) {
Sub s = new Sub("INDIA");
}
}
O / P:5我
如果你将父类更改为Abstract也会相同 说明: super(s)是用于调用超类构造函数的关键字,因此它只使用参数构造函数调用父(超)类 如果你将你的父类更改为抽象类,那么功能将与你不删除你的1参数构造函数相同,所以它将以相同的方式调用你的抽象类构造函数