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. mac使用sublime text3打开当前文件夹的终端

    打开sublime text3,同时按住shift+command+p打开扩展列表, 选择Package Control: Install Pageage,回车. 在输入框输入: terminal,回 ...

  2. Linux sssd 进程 ldap 客户端配置

    Linux sssd 进程 ldap 客户端配置 标签(空格分隔): ldap authconfig authconfig命令解析:authconfig 面对多计算机的身份管理以及账户信息同步, 其解 ...

  3. find命令不递归查询子目录

    [root@dbrg-2 test]# find .  ! -name "." -type d -prune -o -type f -name "*.jpg" ...

  4. 【Python】模块学习之locust性能测试

    背景 locust是一个python的第三方库,用于做性能测试,可使用多台机器同时对一台服务器进行压测,使用其中一台机器作为主节点,进行分布式管理 博主测试接口的时候一直是使用python脚本,后来有 ...

  5. Android jni/ndk编程四:jni引用类型

    一.JNI引用类型 JNI支持三种类型的 opaque reference:local references, global references,和weak global references,下面 ...

  6. DFA和NFA的区别

    正则表达式引擎分成两类,一类称为DFA(确定性有穷自动机),另一类称为NFA(非确定性有穷自动机).两类引擎要顺利工作,都必须有一个正则式和一个文本串,一个捏在手里,一个吃下去.DFA捏着文本串去比较 ...

  7. Android studio 项目支持JNI方法

    步骤: 1. build.gradle 配置如下,主要两项 ndk 和 sourceSets apply plugin: 'com.android.application' android { com ...

  8. [go]unsafe.Sizeof浅析

    sizeof 如果x为一个切片,sizeof返回的大小是切片的描述符,而不是切片所指向的内存的大小. 那么这里如果换成一个数组呢?而不是一个切片 arr := [...]int{1,2,3,4,5} ...

  9. 开源的图片查看库之PhotoView

    PhotoView是一个开源的图片查看库,可以实现图片的浏览,手势放大缩小等操作,以及支持在ViewPager中翻页浏览图片等功能.PhotoView使用简单,还可以对缩放模式进行设置, 其开源地址为 ...

  10. 搭建与破解wiki (confluence)

    搭建环境: 操作系统:contos7 数据库:5.5.60-MariaDB java版本: jdk-11.0.2 confluence版本:confluence6.7.1 一. 准备工作 下载conf ...