Child-class构造函数中的super(s)是什么?

时间:2017-04-09 11:00:03

标签: java abstract-class subclass superclass super

我目前正面临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类中做了什么?如果我将父类从公开更改为抽象,会发生什么?

4 个答案:

答案 0 :(得分:2)

如果您的方法覆盖了其中一个超类的方法,则可以通过使用关键字super来调用重写的方法。

如果我们谈论的是构造函数,那么:

  • with super(),调用超类无参数构造函数;
  • with 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参数构造函数相同,所以它将以相同的方式调用你的抽象类构造函数