java回忆录—this和super的比较

在JAVA程序中似乎经常见到“this”,自己也偶尔用到它,但是到底“this”该怎么用,却心中无数!很多人一提起它,就说“当前对象”,可到底什么是当前对象,是什么当前对象,他自己也不清楚。

先说下构造函数:

构造方法注意事项

如果你不提供构造方法,系统会给出默认构造方法

如果你提供了构造方法,系统将不再提供

构造方法也是可以重载的

this主要要三种用法:

1、表示对当前对象的引用

2、表示用类的成员变量,而非方法参数,注意在函数参数和成员变量同名是进行区分!其实这是第一种用法的特例,比较常用,所以那出来强调一下。

例子:
public class Test2 {

    public static void main(String[] args) {
        Student s = new Student(10);
    }

}
class Student {
    int age;
    String name;
    public Student(int age) {
        this.age = age++;
        System.out.println(age+";"+this.age); //参数与成员变量同名,用this区分开
    }
}
结果:

这里写图片描述

3、用于在构造方法中引用满足指定参数类型的构造器(其实也就是构造方法)。

例子:
class Student {
    int age;
    String name;
    public Student(int age) {
        this.age = age;
    }
    public Student(int age,String name) {
        this(age); //this调用一个参数的构造函数,且必须放在第一行,只能调用一次
        this.name = name;
    }
}

但是这里必须非常注意:只能引用一个构造方法且必须位于开始!

还有就是注意:this不能用在static方法中!所以甚至有人给static方法的定义就是:没有this的方法!虽然夸张,但是却充分说明this不能在static方法中使用!

super主要有两种用法:

1)表示当前类的父类的引用

2)调用父类的同名成员变量或者方法(super.成员变量/super.成员方法)

2)显示地调用父类的构造器(super(parameter1,parameter2....)

这里就不多说,跟this的用法类似。

在子类构造函数中不显示调用父类构造函数的话,默认在子类构造函数的第一行调用父类的无参构造函数。
跟this一样要注意的是:如果是用在子类构造器中,则必须是子类构造器的第一个语句。

例子:

public class Test2 {
    public static void main(String[] args)  {
        new Circle();
    }
}

class Draw {

    public Draw(String type) {
        System.out.println(type+" draw constructor");
    }
}

class Shape {
    private Draw draw = new Draw("shape");//1

    public Shape(){
        System.out.println("shape constructor");//2
    }
}

class Circle extends Shape {
    private Draw draw = new Draw("circle");//3
    public Circle() {
        System.out.println("circle constructor");//4
    }
}

结果:

这里写图片描述

这例子主要讲类继承时构造器的调用顺序和初始化顺序。

要记住一点:父类的构造器调用以及初始化过程一定在子类的前面。

由于Circle类的父类是Shape类,所以Shape类先进行初始化,然后再执行Shape类的构造器。

接着才是对子类Circle进行初始化,最后执行Circle的构造器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值