2015-12-30 38 views
0

我正试图学习super的概念。有人能告诉我super(i)中的i是指什么吗?当调用超级方法时,我指的是什么?

难道int变量iNaturalNumber类吗?它是NaturalNumber?中的参数是否指的是其他内容?我非常困惑的语法。

class NaturalNumber { 

    private int i; 

    public NaturalNumber(int i) { this.i = i; } 
    // ... 
} 

class EvenNumber extends NaturalNumber { 

    public EvenNumber(int i) { super(i); } 
    // ... 
} 
+0

只有一种可能性,因为在调用'super()'的时候只有一个'i'可见。超类的实例变量是私有的,因此此时不可见。 – EJP

回答

2

super(arguemnts)是打电话给你传递arguments到父类的构造。
class EvenNumber extends NaturalNumber情况下,它是确保自然数内斯类的机制。

在这种情况下会发生什么情况是,您将通过public EvenNumber(int i)传递给super类构造函数相同的值,您传递给EvenNumber类。所以它会初始化private int i字段(因为它是私有的,所以你不能直接访问EvenNumber)。

也许你会更好看,如果我们重命名变量一点:

class NaturalNumber { 

    private int value; 

    public NaturalNumber(int naturalValue) { 
     this.value = naturalValue; 
    } 
    // ... 
} 

class EvenNumber extends NaturalNumber { 

    public EvenNumber(int oddValue) { 
     super(oddValue); 
    } 
    // ... 
} 

所以,当你通过它发生在EvenNumber(int oddValue)构造new EvenNumber(2)首先创建的EvenNumber实例super(2)将调用NaturalNumber(int naturalValue)构造,并通过2它最终会将int value设置为2

3

在你的例子中它是EvenNumber的构造函数参数。调用super(i)将构造函数参数传递给超类构造函数(通过值,因为它是一个原语)。超类构造函数然后将该值存储在专用字段中。

1

当你调用super(i),它会调用父类的构造函数。 super关键字是指超类(父类)。在这种情况下,您的EvenNumber的超类是NaturalNumber,因为偶数延伸了 NaturalNumber。所以基本上,通过说super(i)你说的是NaturalNumber(i)

1
class NaturalNumber { 

private int i; 

public NaturalNumber(int x) { this.i = x; } 
// ... 
} 

class EvenNumber extends NaturalNumber { 

public EvenNumber(int y) { super(y); } 
// ... 
} 

考虑上面的代码。这段代码和你的代码完全一样。我改变了变量名称来清除它。所以,当你调用super(y)时,它所做的就是调用它的父类的构造函数,它是NaturalNumber(i),y的值传递给此构造函数,并且在此构造函数中设置变量i的值等于传递给构造函数的值。

所以,当我们调用super(INT),它的作用是传递一个整数值给父类的构造函数。 此外,设置父类的一些变量我们可以做super.i=10将设定变量“i”的父类至10

-1

super()应该用相同的参数的构造函数被调用超级,因为它完全一样。例如:

class Person { 
     private name; 

     public Person(String name) { 
      this.name = name; 
     } 

     public Person() { /* Empty constructors initialize with default values, 
           i.e in this case name is initialized with null*/ 
     } 
    } 

    class Employee extends Person { 
     private double salary; 

     public Employee(double salary) { 
      super("Michael"); 
      this.salary = salary; 
      /* That means that the emplyee which is created is a person 
       who's name is "Michael"*/ 
     } 

     public Employee(double salary) { 
      super(); 
      this.salary = salary; 
      /* That means that the emplyee which is created is a person 
       who's name is null as the empty constructor initialized it*/ 
     } 
    } 

希望这对我有所帮助。

+1

虽然不回答“我”的实际情况,如果它受到孩子或父母的约束。 – Makoto

+0

我的回答是对一般情况下“super()”的基本解释,因此@dzjustinli能够理解它在他的问题中提到的含义。我并不担心将解决方案解释为基本概念,因为@dzjustinli是java中的开端。 –

+0

所以你同意你还没有回答这个问题。 – EJP

1

super表达i专门局部变量iNaturalNumber类的内部。它没有而不是扩大了范围。

相关问题