super(variableName)之间的区别;和super.variableName

问题描述 投票:0回答:5

enter image description here当你想要初始化参数并且你想将其中一个分配给父类的变量时,构造函数中super(variable-name);super.variableName = something;之间有什么区别?

例如,我想实现“Zahnradfraese”的构造函数,它采用参数“int Kennung”,并且此参数应分配给父类“Produktionmittel”的属性“kennung”

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

java oop inheritance constructor superclass
5个回答
1
投票

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

现在在你的情况下:根据给定的类图,类int Kennung有一个构造函数,它接受kennung参数。此外,setKennung()是父类,没有构造函数,而是有方法super.setKennung(kennung)。所以你可以从Zahnradfraese类的构造函数中做kennung。你也可以在public class Zahnradfraese extends Kennung{ public Zahnradfraese(int kennung){ super.setKennung(kennung); } } 中声明一个构造函数,但这意味着偏离了具有setter和getter方法而没有构造函数的类图。

super(variableName);

2
投票

super.variableName = something;method()有什么区别?

super(variableName)(这里,super.variableName = something;)是一个方法调用(这里是父的构造函数调用)。

super是父母领域的任务。

当我想从这个父类调用变量时,我是否应该总是使用super(variableName)?如果我在子类中有另一个具有相同名称的变量,我是否只使用它?

super.variableName可以初始化父母的内心状态,特别是super.variableName。在访问之前初始化Zahnradfraese是合理的。您列出的两种方式都可以用于此目的。只需确保没有代码重复。

我想实现int Kennung的构造函数,它接受参数kennung,并且此参数应该分配给父类Produktionmittel的属性Produktionmittel

添加一个构造函数到int,它需要一个public Produktionmittel(int i) { kennung = i; }

public Zahnradfraese(int kennung) {
    super(kennung);
}

并从孩子那里打电话:

super(variableName)

1
投票

所以super.variableName = something;正在调用你的父类一个arg构造函数,并且该逻辑被执行

somethingvariableName值赋给父类变量super()


1
投票

super.s是一个关键字,用于调用父类中的构造函数,并且必须从子类的构造函数内部调用它。它也必须是第一个声明。

其中s用于设置子类中的变量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; } } (在父类中声明),并且它没有上述限制。

见下面的例子:

public class P{
  protected String variable1;
  private boolean variableInitialized = false;

  public P (String s){
     this.variable1 = s;
     this.variableInitialized=true;
  }
}

public class C extends P{

}

1
投票

super(arg)调用超类的构造函数,设置变量只是设置变量。 (构造函数可能包含更多逻辑,而不仅仅是分配变量,您可以使用第二种方式绕过该变量)

简单的例子:

super("x")

C中调用super.variable1="x"也会设置布尔标志,因为父类“可能会期望”它。调用qazxswpoi不会影响布尔标志,也不能更改它,因为它是私有的。

作为拇指的规则,我会说:如果某个变量有专用的构造函数,那么它似乎值得使用它,除非您确实想要覆盖该实现。

© www.soinside.com 2019 - 2024. All rights reserved.