4 回答
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); // <=====
}
}
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");
}
}
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();
}
}
TA贡献1840条经验 获得超5个赞
当父类和子类都有同名成员时访问父类的数据成员,显式调用父类的无参数参数化构造函数,当子类重写该方法时访问父类的方法。它可用于访问父类的变量,调用父类的构造函数,并可用于方法覆盖的情况。
添加回答
举报