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()都必须在构造函数的第一行进行调用,否则就是错误的

Java中this与super的区别的更多相关文章

  1. Java中this与super的区别【6】

    若有不正之处,请多多谅解并欢迎批评指正,不甚感激.请尊重作者劳动成果: 本文原创作者:pipi-changing本文原创出处:http://www.cnblogs.com/pipi-changing/ ...

  2. Java基础-this和super的区别

    package com.cn.This; /** * this与super的区别: * 1.this相当于指向本类的对象的指针,调用本类的另一种类型的构造方法 * 2.super调用的是父类中形参相同 ...

  3. Java中Set Map List 的区别

    java中set map list的区别: 都是集合接口 简要说明 set --其中的值不允许重复,无序的数据结构 list   --其中的值允许重复,因为其为有序的数据结构 map--成对的数据结构 ...

  4. Java中Comparable和Comparator接口区别分析

    Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ...

  5. 转:Java中abstract和interface的区别

    转自:Java中abstract和interface的区别 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java ...

  6. Java中堆和栈的区别(转)

    栈与堆都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆.      Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new. ...

  7. 转:二十一、详细解析Java中抽象类和接口的区别

    转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...

  8. Java中Long与long的区别(转)

    Java中Long与long的区别(转) [本文转载自:http://www.cnblogs.com/bluestorm/archive/2012/04/22/2464739.html] 转载请联系原 ...

  9. java中堆和堆栈的区别

    java中堆和堆栈的区别(一) 1.栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 2. 栈的优势是,存取 ...

随机推荐

  1. 免费馅饼~-~ (hdu 1176

    当我准备要写这个随笔的时候是需要勇气的. 掉馅饼嘛,肯定是坑. (hdu1176 话说,gameboy人品太好,放学回家路上有馅饼可捡.还就在0~10这11个位置里,当馅饼开始掉的时候,gameboy ...

  2. Selenium 的页面加载以及几种等待的问题

    1. PageLoadStrategy : 当调用driver.get("https://xxxx.xxx.xxx")来访问某页面时,get方法通常会阻塞浏览器直到页面完全加载后才 ...

  3. PHP反序列化总结

    之前遇到过很多次php反序列化相关的内容,总结一下. (反)序列化给我们传递对象提供了一种简单的方法.serialize()将一个对象转换成一个字符串,unserialize()将字符串还原为一个对象 ...

  4. LeetCode 63. 不同路径 II(Unique Paths II)

    题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为“Finish”). ...

  5. 创建DevExtreme应用程序

    如果你从头开始一个项目,那就使用DevExtreme Angular 模板.生成的项目带导航菜单以及在响应布局中的几个对应的示例视图. 你可以使用 DevExtreme CLI 生成应用程序: npx ...

  6. cygwin下make指令不存在 & cmd也能用make的配置方法

    最近做毕设需要使用Mask R-CNN,就配置了相关环境,在安装pycocotools时要make,于是决定用cygwin来做.但在路径下make时出现了问题: bash错误:make指令不存在.一番 ...

  7. ambari部署Hadoop集群(2)

    准备本地 repository 1. 下载下面的包 wget http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.7.3 ...

  8. PLSQL报错: ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务

    一开始吓尿了,以为自己动着什么东西了把数据库玩坏了,谁知道打开服务发现服务没启动........... 我们要确保数据库服务是启动状态

  9. rest 参数与扩展运算符

    rest 参数与扩展运算符 1.rest 参数 ES6 引入 rest 参数(形式为...变量名),用于获取函数的多余参数,这样就不需要使用arguments对象了.rest 参数搭配的变量是一个数组 ...

  10. 如何在GitHub上下载一部分文件(单个文件夹)

    Preface Github下的项目可能很大,里面有很多的子文件夹,我们可能只需要使用某个子目录下的资源,可以不用下载完整的repo就能使用. 例如,我想下载这个repo中的mnist_gan文件:h ...