Java中的super关键字-创新互联

一、super关键字是干什么的?

简单来说,就是子类中重写的方法,既需要调用父类的方法,又需要再额外增加一些自己的东西。已经在Java的继承这篇文章中使用过super关键字了。

创新互联公司是一家集网站建设,蓝山企业网站建设,蓝山品牌网站建设,网站定制,蓝山网站建设报价,网络营销,网络优化,蓝山网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

简单来说:super代表父类的引用,用于访问父类的属性,方法和构造器。

abstract class Report{
    void setReport(){
        //设置报告
    }
    void printReport(){
        //打印报告
    }
}

class sonReport extends Report{
    @override
    void setReport(){
        super.setReport();   //使用super关键字调用父类的setReport()方法,调用完后再继续往下走。
        myselfReportMethod();
        printReport();
    }
}
二、super关键字详解
  1. super关键字访问父类的属性,但是不能访问父类的private属性。super.属性名;(属性就是父类中的实例变量。在子类中,从父类那继承来的实例变量的值是可以修改的,只要不是private)
  2. super关键字访问父类的方法,但是不能访问父类的private方法。super.方法名(参数列表);
  3. 访问父类的构造器。super(参数列表); 只能放在构造器第一句(这点和this关键字一样),且只能出现一句。
三、用super关键字的好处

1、能够分工明确,父类属性由父类初始化,子类属性由子类初始化。

class computer{
    String cpu;
    int memory;
    int disk;
}

public class PC extends Computer{
    private String brand;
    
    public PC(String cpu, int memory, int disk, String brand){
        super(cpu, memory, disk);
        this.brand = brand;
    }
}

2、如果子类中的成员有和父类中的成员(属性和方法)重名时,为了访问父类的成员,必须通过super。如果没有重名,用super, this和直接调用是一样的效果。例如:下面的代码,如果子类中没有重名的方法,那他们效果是一样的,都是调用父类中的cal方法,但是如果子类PC中也有一个cal方法,那么直接调用和this.cal()就是调用的子类PC中的cal方法,而super.call()还是调用父类Computer中cal方法。

使用父类可访问方法的三种方式:(访问属性和方法的这个顺序一样)

class Computer{
    String cpu;
    int memory;
    int disk;
    int i = 100;

    public void cal(){
        
    }
}

public class PC extends Computer{
    private String brand;
    int i = 888;
    
    public PC(String cpu, int memory, int disk, String brand){
        super(cpu, memory, disk);
        this.brand = brand;
    }
    
    public void sum(){
        //想要在这里调用cal方法
        //第一种方式:直接调用
        //这种方式它会向上去找cal方式,顺序是:
        //(1) 先找本类,如果有就调用
        //(2) 如果没有,就向上去找父类(如果有,并可以调用(private的就不可以调用),就调用)
        //(3) 如果父类没有,则继续去找父类的父类,一直向上,直到找到object类。
        //注意:如果在查找方法的过程中找到了,但是不能访问,是会报错的。没有找到,提示方法不存在
        cal();
        
        //第二种方式:this
        //this.call和上面的第一种是完全等价的,查找顺序也是完全一样的
        this.call();

        //第三种方式:super
        //与上面两种方式不同,它没有第一步,而是直接从第二步开始去找父类的,其他的都一样。哪怕自己的子类有一个cal方法,他也不会去调用。
        super.call();

        sout(i);   //--->888
        sout(this.i);   //--->888
        sout(super.i);   //--->100
    }
}

四、super和this的比较

super关键字和this关键字很相似,但super关键字是用于访问父类,this关键字是用于访问本类。

Fig.1 super关键字和this关键字的比较

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


文章标题:Java中的super关键字-创新互联
当前URL:http://scyanting.com/article/dcjdhs.html