mut*_*y91 77 java inheritance super
我目前正在学习Java课程中的类继承,我不知道何时使用该super()调用?
编辑:
我发现了这个代码示例:super.variable
class A
{
    int k = 10;
}
class Test extends A
{
    public void m() {
        System.out.println(super.k);
    }
}
所以我理解在这里,您必须使用super访问k超类中的变量.但是,在任何其他情况下,做super();什么?在其自己的?
Mar*_*ers 135
调用究竟 super()是总是多余的.它明确地做了一些隐含的事情.那是因为如果省略对超级构造函数的调用,无论如何都会自动调用无参数的超级构造函数.不是说这是不好的风格; 有些人喜欢明白.
但是,当超级构造函数获取要从子类传入的参数时,它变得有用.
public class Animal {
   private final String noise;
   protected Animal(String noise) {
      this.noise = noise;
   }
   public void makeNoise() {
      System.out.println(noise);
   }
}
public class Pig extends Animal {
    public Pig() {
       super("Oink");
    }
}
小智 22
super当您想要在子类中重写方法时从父类调用方法时,也可以在子类中使用该关键字.
例:
public class CellPhone {
    public void print() {
        System.out.println("I'm a cellphone");
    }
}
public class TouchPhone extends CellPhone {
    @Override
    public void print() {
        super.print();
        System.out.println("I'm a touch screen cellphone");
    }
    public static void main (strings[] args) {
        TouchPhone p = new TouchPhone();
        p.print();
    }
}
这里,该行super.print()调用print()超类的方法CellPhone.输出将是:
I'm a cellphone
I'm a touch screen cellphone
当你想要调用超类构造函数时 - 初始化其中的字段.看看这篇文章,了解何时使用它:
http://download.oracle.com/javase/tutorial/java/IandI/super.html
您可以将它用作子类构造函数的第一行来调用其父类的构造函数.
例如:
public class TheSuper{
    public TheSuper(){
        eatCake();
    }
}
public class TheSub extends TheSuper{
    public TheSub(){
        super();
        eatMoreCake();
    }
}
构造一个实例TheSub会调用eatCake()和eatMoreCake()
| 归档时间: | 
 | 
| 查看次数: | 163843 次 | 
| 最近记录: |