首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >super.variableName与super(variableName)的区别

super.variableName与super(variableName)的区别
EN

Stack Overflow用户
提问于 2018-09-17 00:20:33
回答 4查看 268关注 0票数 0

当你想初始化参数并将其中一个赋值给父类的变量时,构造函数中的super(variable-name);super.variableName = something;有什么不同?

例如,我想实现"Zahnradfraese“的构造函数,它接受参数"int Kennung”,这个参数应该被赋值给父类"Produktionmittel“的属性"kennung”。

当我想从这个父类中调用一个变量时,我应该总是使用super吗?或者,如果我在子类中有另一个同名的变量,我应该只使用它?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-09-17 00:45:42

super(variable_name)表示构造函数调用,应该是构造函数的第一行。而super.variableName = something;意味着您使用super从子类中为父类的实例变量赋值,该值用于引用父类对象。

现在以您的例子为例:根据给定的类图,类Zahnradfraese有一个接受int Kennung参数的构造函数。此外,kennung是父类,没有构造函数,而是具有方法setKennung()。因此,您可以从Zahnradfraese类的构造函数内部执行super.setKennung(kennung)。您也可以在kennung中声明一个构造函数,但这意味着与类图不同,类图只有setter和getter方法,没有构造函数。

代码语言:javascript
复制
public class Zahnradfraese extends Kennung{
  public Zahnradfraese(int kennung){
    super.setKennung(kennung);
  }
}
票数 1
EN

Stack Overflow用户

发布于 2018-09-17 00:28:24

因此,super(variableName)调用您的父类一个参数构造函数,然后执行该逻辑

super.variableName = something;正在将something值赋给父类变量variableName

票数 1
EN

Stack Overflow用户

发布于 2018-09-17 00:28:54

super()是一个关键字,用于调用父类中的构造函数,它必须从子类的构造函数内部调用。另外,它必须是第一个语句。

其中,as super.s用于设置子类中的变量s (在父类中声明),并且没有上述限制。

如下例所示:

代码语言:javascript
复制
class Test {
    int s;

    Test(int d) {
    }
}

class T extends Test {
    T() {
        super(8);
        int d = 99;
        super.s = 00;
    }

    void ss() {
        super.s = 99;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52356075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档