java - 在扩展类构造函数中错误使用 'super'

标签 java polymorphism super

我以为我理解了 super 的作用,但是我无法理解下面代码中的原因

class test {
    int i;

    test(int i){
    this.i = i;
}

}    
class testSub extends test{ 

    testSub(int i) {
        super(i);
    }

    /*testSub(int i) {
        this.i = i;
    }*/
}

为什么第二个构造函数(已注释)不起作用?它正在做同样的事情..

感谢您的任何澄清:)

编辑:谢谢大家 - 抱歉我无法标记更多答案。如果这不应该是一个编辑,也很抱歉。

快速回顾一下:由于 testSub 是父测试的子级,因此即使构造函数执行相同的操作,子级也需要由其父级部分组成。只有当 test 具有默认构造函数时,这才是可能的。 如果我没说清楚,请回复。

最佳答案

你的类test有一个显式的构造函数。您必须在每个子类的构造函数中使用此构造函数。

如果test没有显式构造函数,则会生成一个不带参数的隐式构造函数,并且您不必在子类中显式调用它。在这种情况下,您的第二个构造函数将完全有效。

class test {
    int i;
}

class testSub extends test{ 

    testSub(int i) {
        this.i = i;
    }
}

关于java - 在扩展类构造函数中错误使用 'super',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29594223/

相关文章:

java - 使用递归回溯时耗尽堆

java - 如何创建自定义 javadoc 标签?

java - Jboss ws wsdl问题

java - 多态性和方法重载

c# - 当我有一种在 Haskell 中使用对象式多态消息传递的冲动时,我该怎么办?

java - 如果一个类继承了一个方法,那么在该类上调用该方法是否指向父类(super class),或者是否在子类中创建本地副本?

java - 为什么 super 在下面的 Java 示例中引用当前对象

android - 覆盖 onClick 并使用默认的 onclick

java - 有没有办法更改首选项标题内图标的颜色?

java - 在java中传递后代而不是接口(interface)