java中super关键字有什么用
- 行业动态
- 2023-12-23
- 4190
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关键字。
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关键字不能直接访问非静态成员变量/方法; // 所以通常情况下,我们会将匿名内部类改为继承自一个具体的父类,然后就可以直接访问其成员变量/方法了。}
本站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本站,有问题联系侵删!
本文链接:http://www.xixizhuji.com/fuzhu/272266.html