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

创新互联建站服务项目包括华州网站建设、华州网站制作、华州网页制作以及华州网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,华州网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到华州省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
1、调用父类的构造方法
当子类创建对象时,如果没有显式地调用父类的构造方法,那么父类的无参构造方法会被自动调用,如果需要在子类的构造方法中调用父类的有参构造方法,可以使用super关键字。
class Parent {
public Parent() {
System.out.println("Parent constructor");
}
}
class Child extends Parent {
public Child() {
super(); // 调用父类的无参构造方法
System.out.println("Child constructor");
}
}
2、访问父类的成员变量和成员方法
在子类中,可以使用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方法:
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关键字。
Listlist = 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关键字不能直接访问非静态成员变量/方法; // 所以通常情况下,我们会将匿名内部类改为继承自一个具体的父类,然后就可以直接访问其成员变量/方法了。}