super,this的区别和使用

来源:互联网 发布:mac安装战网失败 编辑:程序博客网 时间:2024/06/05 20:03

this的使用和说明

java的this关键字只能用于方法体内,java虚拟机(JVM)会给这个对象分配一个引用自身的指针,这个指针的名字就是this.

注意:函数参数或者函数中的局部变量和成员变量同名的话,成员变量被屏蔽,此时要访问成员变量则需要使用“this.成员变量”的方式引用成员变量,如果没有同名的情况下,可以直接使用。
这里写图片描述

运行结果

张三 25Tom5432112345

super的使用和说明

super关键字的作用是用于子类引用父类的成员,如属性、方法或者构造器。

  • 调用父类构造器

基本格式是:super([arg_list]);

直接用super()加上父类构造器所需要的参数,就可以调用父类的构造器了。如果父类中有多个构造器,系统自动根据super()中参数个数和参数类型类匹配父类中的构造器。

需要注意的是如果子类中没有显式地调用父类中无参数的构造器,也没有在构造器中调用重载的其它构造器,则系统将会默认调用父类中无参数的构造器。此时如果父类中没有无参的构造器,则编译将会出错。

子类中的成员方法在使用super的时候,一般尽可能的使用private私有化。

子类构造方法调用父类的构造方法一般用super(参数列表)的方式调用,参数不是必须的。同时还要注意,super(参数列表)这条语句只能用在子类构造方法体中的第一行。

  • 调用父类方法、属性

当super用于引用父类的属性或方法时,使用下面的格式:
super.属性
super.方法([arg_list])
注意,在这个时候,父类的属性或方法必须是那些protected或者public等可以让子类访问的属性或者方法。

案例分析

public class Father {    public String v = "父类Father";    public String x = "父类的成员变量";    public Father()    {        System.out.println("Father无参构造方法被调用");    }    public Father(String v)    {        this.v = "Father有参构造方法被调用";    }    public void showMessage()    {        System.out.println("Father的showMessage()方法被调用");    }    public static void main(String args[])    {        //自动生成存根方法    }}
public class Son extends Father {    public String v = "子类Son";    public Son()    {        //调用父类的构造方法,且只能放在第一行        super();        System.out.println("Son的无参构造方法被调用");    }    public Son(String str)    {        super(str);        System.out.println("Son的有参构造方法被调用");    }    //覆盖了父类的成员方法showMessage()    public void showMessage()    {        System.out.println("Son的showMessage()方法被调用");    }    public void test()    {        String v = "局部变量v覆盖了成员变量v和超类变量v";        System.out.println("---------------------------");        System.out.println("子类局部变量v="+v);        System.out.println("子类成员变量v="+this.v);        System.out.println("父类成员变量v="+super.v);        System.out.println("子类继承而来的超类成员变量x="+x);        System.out.println("超类成员变量x="+super.x);        System.out.println("---------------------------");        showMessage();//调用子类的showMessage()方法        this.showMessage();//调用子类的showMessage()方法        super.showMessage();//调用父类的showMessage()方法    }    public static void main(String args[])    {        Son son =new Son();        son.test();    }}
0 0
原创粉丝点击