关键字super的作用意义

来源:互联网 发布:怎么查淘宝等级手机 编辑:程序博客网 时间:2024/05/29 16:56

    由于子类可以覆盖父类的实例方法、隐藏父类的类方法、隐藏父类的字段等,但是我们有时候需要引用到父类的一些方法,这时候需要借助关键字super.

 

1.使用super关键字访问父类中的成员.

    1-1.调用父类中被覆盖的方法

    示例:

public class Superclass {    public void printMethod() {        System.out.println("在Superclass中的输出。");    }}
public class Subclass extends Superclass {//重写超类Superclass中的printMethod方法    public void printMethod() {         super.printMethod();//使用super关键字调用超类中的方法        System.out.println("在Subclass中的输出。");    }}
public class ExtendsDemo7{    public static void main(String[] args) {        Subclass s = new Subclass();    s.printMethod();    }}

输出结果:

在Superclass中的输出.在Subclass中的输出.

 

    1-2.访问父类中被隐藏的字段

    示例: 

// 父类Aclass A{public String name = "张小明";}// A的子类Bclass B extends A{public String name = "赵红丽";public void self( ){System.out.println("我的名字是:" + name);System.out.println("我原来的名字是:" + super.name);//使用super访问超类中被隐藏的字段}}// 主程序ExtendsDemo8public class ExtendsDemo8{  public static void main(String[ ] args){B b = new B( );b.self( );  }}

输出结果:

我的名字是: 赵红丽我原来的名字是: 张小明


2.使用super关键字调用父类的构造器:

    子类是不继承父类的构造器.因此,如果要初始化父类中的字段,可以在子类的构造器中,通过关键字super调用父类的构造器.对父类的构造器的调用必须放在子类的构造器的第一行.

    示例:

// 父类Aclass A{A(){System.out.println("这里是超类A的构造器。");}}// A的子类Bclass B extends A{B(){super();System.out.println("这里是子类B的构造器。");}}// 主程序ExtendsDemo9.javapublic class ExtendsDemo9{    public static void main(String[] args) {B b = new B();    }}

输出结果:

这里是超类A的构造器.这里是子类B的构造器.


3.构造器连

    如果一个子类的构造器显式或隐式地调用其父类的一个构造器,而其父类会再显式或隐式地调用父类的父类的构造器.形成一个完整的构造器链.

    示例:

class Book {    private String ISBN;    Book(String isbn){this.ISBN = isbn;    }    public String getISBN(){return this.ISBN;    }    public boolean equals(Object obj) {        if (obj instanceof Book)            return ISBN.equals(((Book)obj).getISBN());         else            return false;    }}public class ExtendsDemo11{    public static void main(String[] args) {Book firstBook  = new Book("0201914670"); Book secondBook = new Book("0201914670");if (firstBook.equals(secondBook)) {    System.out.println("两个对象相等.");} else {    System.out.println("两个对象不相等.");}    }}

输出结果:

这里是超类A的构造器.这里是超类B的构造器.这里是子类C的构造器.


 

原创粉丝点击