为了账号安全,请及时绑定邮箱和手机立即绑定

什么时候使用super()?

什么时候使用super()?

杨__羊羊 2019-11-11 10:36:11
我目前正在Java课程中学习有关类继承的信息,我不知道何时使用该super()调用?编辑:我发现使用此代码示例:super.variableclass A{    int k = 10;}class Test extends A{    public void m() {        System.out.println(super.k);    }}因此,我知道在这里,您必须使用它super来访问k超类中的变量。但是,在任何其他情况下,该怎么super();办?在其自己的?
查看完整描述

3 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

精确 调用始终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");

    }

}


查看完整回答
反对 回复 2019-11-11
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

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


查看完整回答
反对 回复 2019-11-11
?
UYOU

TA贡献1878条经验 获得超4个赞

您可以将其用作子类构造函数的第一行,以调用其父类的构造函数。


例如:


public class TheSuper{

    public TheSuper(){

        eatCake();

    }

}


public class TheSub extends TheSuper{

    public TheSub(){

        super();

        eatMoreCake();

    }

}

构造的实例TheSub将同时调用eatCake()和eatMoreCake()


查看完整回答
反对 回复 2019-11-11
  • 3 回答
  • 0 关注
  • 613 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信