博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中this与super的区别
阅读量:5952 次
发布时间:2019-06-19

本文共 1818 字,大约阅读时间需要 6 分钟。

hot3.png

this与super关键字在java中构造函数中的应用: 

**

super()函数

** 

super()函数在子类构造函数中调用父类的构造函数时使用,而且必须要在构造函数的第一行,例如:

class Animal {    public Animal() {        System.out.println("An Animal");    }}class Dog extends Animal {    public Dog() {        super();        System.out.println("A Dog");        //super();错误的,因为super()方法必须在构造函数的第一行        //如果子类构造函数中没有写super()函数,编译器会自动帮我们添加一个无参数的super()    }}class Test{    public static void main(String [] args){        Dog dog = new Dog();    }}

执行这段代码的结果为:

An Animal 

A Dog

定义子类的一个对象时,会先调用子类的构造函数,然后在调用父类的构造函数,如果父类函数足够多的话,会一直调用到最终的父类构造函数,函数调用时会使用栈空间,所以按照入栈的顺序,最先进入的是子类的构造函数,然后才是邻近的父类构造函数,最后再栈顶的是最终的父类构造函数,构造函数执行是则按照从栈顶到栈底的顺序依次执行,所以本例中的执行结果是先执行Animal的构造函数,然后再执行子类的构造函数。

class Animal {    private String name;    public String getName(){        name = name;    }    public Animal(String name) {        this.name = name;    }}class Dog extends Animal {    public Dog() {        super(name);    }}class Test{    public static void main(String [] args){        Dog dog = new Dog("jack");        System.out.println(dog.getName());    }}

运行结果:

jack

当父类构造函数有参数时,如果要获取父类的private的成员变量并给其赋值作为子类的结果,此时在定义子类的构造函数时就需要调用父类的构造函数,并传值,如上例所示。

this()函数

this()函数主要应用于同一类中从某个构造函数调用另一个重载版的构造函数。this()只能用在构造函数中,并且也只能在第一行。所以在同一个构造函数中this()和super()不能同时出现。 

例如下面的这个例子:

class Mini extends Car {    Color color;    //无参数函数以默认的颜色调用真正的构造函数    public Mini() {        this(color.Red);    }    //真正的构造函数    public Mini(Color c){        super("mini");        color = c;    }    //不能同时调用super()和this(),因为他们只能选择一个    public Mini(int size) {        super(size);        this(color.Red);}

`所以综上所述,super()与this()的区别主要有以下: 

不同点: 
1、super()主要是对父类构造函数的调用,this()是对重载构造函数的调用 
2、super()主要是在继承了父类的子类的构造函数中使用,是在不同类中的使用;this()主要是在同一类的不同构造函数中的使用 
相同点: 
1、super()和this()都必须在构造函数的第一行进行调用,否则就是错误的

转载于:https://my.oschina.net/architectliuyuanyuan/blog/1615650

你可能感兴趣的文章
好吧好吧,就在这里消磨时间
查看>>
二层的,DTP+CAM/ARP
查看>>
2011工作总结
查看>>
javascript 操作DOM元素样式
查看>>
Android 内存管理 &Memory Leak & OOM 分析
查看>>
[转]html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法
查看>>
[水]三个数学的小技巧题
查看>>
[leetcode-342-Power of Four]
查看>>
MongoDB3.0 创建用户
查看>>
2017-2018-1 20155319 《信息安全系统设计基础》第3周学习总结
查看>>
express 3.0.x 中默认不支持flash() 的解决方法
查看>>
uva-111-dp
查看>>
算法学习1——矩阵转置
查看>>
Tcl与Design Compiler (九)——综合后的形式验证
查看>>
跨页数据传递
查看>>
Linux查看系统负载(CPU和MEM考虑)
查看>>
Codeforces Round #249 (Div. 2) B. Pasha Maximizes
查看>>
【Android游戏开发十一】手把手让你爱上Android sdk自带“9妹”(9patch 工具),让Android游戏开发更方便!...
查看>>
【查找算法】基于存储的查找算法(哈希查找)
查看>>
JavaWeb网上图书商城完整项目--day02-10.提交注册表单功能之页面实现
查看>>