java - 子类构造函数中的 super 有何作用?

标签 java abstract-class subclass superclass super

我目前面临着对 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/

相关文章:

java - 为具有多种数据类型的 Java 对象建模的最佳方法

Python:子类化元组和运算符

java - MySql准备语句检查特定表JAVA

java - JUnit、JPA、Hibernate 和 Postgres : How to test?

java - 如何从子类的抽象父类 Java 8 访问子类的公共(public)方法

java - 具有所有具体方法的抽象类

python - 如果子类重写了Python中父类的方法,如何引发错误?

java - 声明 List<Integer> 与 ArrayList<Integer> 之间有什么区别?

java - Android API 级别 23 中的 ISO 8601 问题

python - 实现抽象属性而不需要在 child 中重新定义 __init__