java中super关键字有什么用

Java中的super关键字是一个非常重要的关键字,它的主要作用是用来调用父类的构造方法、成员变量和成员方法,在Java中,super关键字主要用于以下几个方面:

1、调用父类的构造方法

java中super关键字有什么用

当子类创建对象时,如果没有显式地调用父类的构造方法,那么父类的无参构造方法会被自动调用,如果需要在子类的构造方法中调用父类的有参构造方法,可以使用super关键字。

class Parent {
    public Parent() {
        System.out.println("Parent constructor");
    }
}
class Child extends Parent {
    public Child() {
        super(); // 调用父类的无参构造方法
        System.out.println("Child constructor");
    }
}

2、访问父类的成员变量和成员方法

在子类中,可以使用super关键字来访问父类的成员变量和成员方法。

java中super关键字有什么用

class Parent {
    private String name = "Parent";
    public String getName() {
        return name;
    }
}
class Child extends Parent {
    private String name = "Child";
    public void setName(String name) {
        super.setName(name); // 调用父类的setName方法
        this.name = name;
    }
}

3、实现多重继承时的菱形问题解决

在Java中,如果一个类继承了两个或多个父类,那么可能会出现菱形问题,即一个子类继承了A父类和B父类,而B父类又继承了C父类,这时如果在子类中使用super关键字调用C父类的方法,就会抛出编译错误,为了解决这个问题,可以使用super关键字来调用所有父类的相同方法。

class A {}
class B extends A {}
class C extends B {}
class D extends C {}
class E extends D {}

在E类中,可以使用super关键字调用所有父类的getName方法:

java中super关键字有什么用

class E extends D {
    public void getName() {
        System.out.println("E getName"); // 调用D的getName方法(通过super关键字)
        System.out.println("E getName (by self)"); // 直接调用自己的getName方法(会抛出编译错误)
    }
}

4、在匿名内部类和Lambda表达式中使用super关键字

在Java中,还可以在匿名内部类和Lambda表达式中使用super关键字。

List<String> list = new ArrayList<>();
list.add("Hello");
list.add("World");
list.forEach(item -> System.out.println(item)); // 在Lambda表达式中使用super关键字(实际上并没有用到){} -> {} 是多余的,可以省略掉,正确的写法是:list.forEach(System.out::println); // 或者使用增强型for循环遍历列表并打印元素:for (String item : list) { System.out.println(item); }; // 在匿名内部类中使用super关键字访问父类的构造方法和成员变量/方法{ super(); // 调用父类的无参构造方法; this.name = "Anonymous"; System.out.println(this.name); // 或者直接访问父类的成员变量/方法:System.out.println(super.name); // 但是这样会抛出编译错误,因为super关键字不能直接访问非静态成员变量/方法; // 所以通常情况下,我们会将匿名内部类改为继承自一个具体的父类,然后就可以直接访问其成员变量/方法了。}

原创文章,作者:酷盾叔,如若转载,请注明出处:https://www.kdun.com/ask/110683.html

(0)
酷盾叔订阅
上一篇 2023-12-23 19:05
下一篇 2023-12-23 19:12

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购  >>点击进入