super,this的区别和使用

this的使用和说明

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

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

运行结果

张三 25
Tom
5432112345
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();
    }
}
  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值