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

超级关键字用法

超级关键字用法

婷婷同学_ 2023-04-13 14:12:40
我是 java 的新手,我有几个基本问题:静态变量/方法使用什么内存?关键字“Super”是否仅在 Method overriding 的情况下才有意义?
查看完整描述

4 回答

?
UYOU

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

关键字super可用于:


声明泛型类型:


public class Foo<E super Bar> { // <=====

    ...

}

从子类构造函数调用基类构造函数:


public class Bar {

    private int id;

    public Bar(int id) {

        this.id = id;

    }

}

public class Foo extends Bar {

    public Foo(int id) {

        super(id); // <=====

    }

}

当子类隐藏字段时,访问基类中的字段:


public class Foo extends Bar {

    private int id;

    public int getFooId() {

        return this.id;

    }

    public int getBarId() {

        return super.id; // <=====

    }

}

从重写的子类方法调用基类方法:


public class Bar {

    public void doGreatWork() {

        ...

    }

}

public class Foo extends Bar {

    @Override

    public void doGreatWork() {

        ...

        super.doGreatWork(); // <=====

        ...

    }

}

当子类重写方法时引用基类方法


public class MultiBar extends Bar {

    public void doGreatWork() {

        list.stream().forEach(super::doGreatWork); // <=====

    }

}


查看完整回答
反对 回复 2023-04-13
?
慕村225694

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

静态变量/方法使用什么内存?


如果我们想访问或调用该方法,我们不需要创建对象,只需在编写方法时使用 static 关键字,如 ->> public static show()。


当我们使用 static 关键字时,该类将被调用并执行该方法。static 意味着我们不能改变值,我们也可以对变量使用 static 关键字,一旦我们使用 static 关键字就意味着我们不能经常改变值。例子:


public class static example

 {

  public static void main(String[] args)

 {

   xyz.i = 10;

   xyz.show();

  }

  }

  class xyz

 {

  static int i;

  public static void show()

  {

   System.out.println("Stackoverflow example by Me");

  }

  }


查看完整回答
反对 回复 2023-04-13
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

关键字“Super”是否仅在 Method overriding 的情况下才有意义?


当我们要调用父类的方法时,子类的方法将在方法重载中执行,因为父类和子类将具有相同的方法名。这就是方法重载发生的原因。为了克服这个问题,我们使用 super 关键字来调用父类方法,即使父类和子类同名。我们可以轻松调用并执行父类方法


例子:


   class A {

    int i;

    

    public void show(){

        System.out.println("A");

    }

}


class B extends A {

    int i;

    

    public void show(){

        super.show()

        System.out.println("B");

    }

}


public class overriding example {

    public static void main(String[]args) {

        B obj1 = new B();

        obj1.show();

    }

}


查看完整回答
反对 回复 2023-04-13
?
慕斯709654

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

当父类和子类都有同名成员时访问父类的数据成员,显式调用父类的无参数参数化构造函数,当子类重写该方法时访问父类的方法。它可用于访问父类的变量,调用父类的构造函数,并可用于方法覆盖的情况。



查看完整回答
反对 回复 2023-04-13
  • 4 回答
  • 0 关注
  • 132 浏览

添加回答

举报

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