Java中this与super的区别以及用法

super()用法

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

 1 class Animal {
 2     public Animal() {
 3         System.out.println("我是一只动物");
 4     }
 5 }
 6 class Cat extends Animal {
 7     public Cat() {
 8         super();//必须放在这里
 9         System.out.println("我是一只小猫");
10         //super();//放在这里会报错
11         //如果子类构造函数中没有写super()函数,编译器会自动帮我们添加一个无参数的super()
12     }
13 }
14 class Test{
15     public static void main(String [] args){
16         Cat cat = new Cat();
17     }
18 }

输出结果如下:

我是一只动物
我是一只小猫

在此介绍下程序运行的顺序

首先main方法当然是程序入口,其次执行main方法里的代码,但并不是按顺序执行的,

执行顺序如下:

  1.静态属性,静态方法声明,静态块。

  2.动态属性,普通方法声明,构造块。

  3.构造方法

注意:如果存在继承关系,一般都是先父类然后子类。

 1 class A {
 2     public A() {
 3         System.out.println("A的构造方法");
 4     }
 5
 6     public static int j = print();
 7
 8     public static int print() {
 9         System.out.println("A print");
10         return 521;
11     }
12 }
13
14 public class Test1 extends A {
15     public Test1() {
16         System.out.println("Test1的构造方法");
17     }
18
19     public static int k = print();
20
21     public static int print() {
22         System.out.println("Test print");
23         return 522;
24     }
25
26     public static void main(String[] args) {
27         System.out.println("main start");
28         Test1 t1 = new Test1();
29     }
30 }

运行结果如下:

A print
Test print
main start
A的构造方法
Test1的构造方法

这是一个带参数的super方法

 1 class Animal {
 2     private String name;
 3     public String getName(){
 4         return this.name;
 5     }
 6     public Animal(String name) {
 7         this.name = name;//这里将参数“小狗”传入给Animal中的name
 8     }
 9 }
10 class Dog extends Animal {
11     public Dog(String name) {
12         super(name);
13     }
14 }
15 class Test{
16     public static void main(String [] args){
17         Dog dog = new Dog("小狗");
18         System.out.println(dog.getName());//执行类Animal中的getName方法
19     }
20 }

执行结果如下:

小狗

this()用法

 (1)this调用本类中的属性,也就是类中的成员变量;
 (2)this调用本类中的其他方法;
 (3)this调用本类中的其他构造方法,调用时要放在构造方法的首行。

String name; //定义一个成员变量name
 private void SetName(String name) { //定义一个参数(局部变量)name
 this.name=name;} //将局部变量的值传递给成员变量

public class Student { //定义一个类,类的名字为student。
 public Student() { //定义一个方法,名字与类相同故为构造方法
 this(“我是构造函数”);
 }
 public Student(String name) { //定义一个带形式参数的构造方法

System.out.println(name);//不难看出这里将输出“我是构造函数”
 }
}

最后一个是返回当前对象,使用return this;

不同点:
1、super()主要是对父类构造函数的调用,this()是对重载构造函数的调用
2、super()主要是在继承了父类的子类的构造函数中使用,是在不同类中的使用;this()主要是在同一类的不同构造函数中的使用

相同点:
1、super()和this()都必须在构造函数的第一行进行调用,否则就是错误的

以上并非自己总结,有些来源网络,如有不同意见可以留言提出

原文地址:https://www.cnblogs.com/xin-Felix/p/9706534.html

时间: 2024-07-30 02:36:12

Java中this与super的区别以及用法的相关文章

Java中this与super的区别【6】

本文原创作者:pipi-changing 本文原创出处:http://www.cnblogs.com/pipi-changing/ 本文版权归作者和博客园共有,未经作者同意必须保留此段声明, 且在文章页面明显位置给出原文连接 ,否则保留追究法律责任的权利. Java中this与super的区别  this&super 什么是this,this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针. Java关键字this只能用于方法的方法体内.当一个对象创建后, Java虚拟机(JV

java中 this和super的区别

this表示当前调用方法的对象的引用: (谁调用这个方法,谁就是这个对象,这个this就是它的引用) 比如: <pre name="code" class="java">public class This_Demo{ String name; public void setName(String name) { this.name = name;// 前一个name是 本类的成员属性: name:后一个name是setName中的参数. } public

java中 this() 和super()的作用及用法

原文地址:http://www.cnblogs.com/hasse/p/5023392.html 一.This Java关键字this只能用于方法体中.this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this,并且this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的this. 1.this三大作用: this调用属性.调用方法.利用this表示当前对象. 2.this的用法: (1).普通的直接引用 这种就不用讲了,this相当于是指向当前对象本身. (

java中throws和throw的区别和用法

1.throws关键字通常被应用在声明方法时,用来指定可能抛出的异常.多个异常可以使用逗号隔开.当在主函数中调用该方法时,如果发生异常,就会将异常抛给指定异常对象.如下面例子所示: public class Shoot {   //创建类 static void pop() throws NegativeArraySizeException { //定义方法并抛出NegativeArraySizeException异常 int [] arr = new int[-3];//创建数组 } publ

关于Java中this和super的用法介绍和区别

1.this&super 什么是this,this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针.当你想要引用当前对象的某种东西,比如当前对象的某个方法,或当前对象的某个成员,你便可以利用this来实现这个目的.要注意的是this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this.his也可作为构造函数来使用.在后面可以看到 而什么是super,可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类.super的作用同样是可

java中抽象类与接口的区别

转自: http://blog.csdn.net/tp7309/article/details/10452445 二者的区别快忘得差不多了,从别处看到这文章感觉写的不错,正好复习复习,也给大家分享一下. 抽象类 abstract class 包含抽象方法的类,叫抽象类.而抽象的概念就是抽象出共同属性:成员变量和方法.所以抽象类可以有private等多种权限的成员变量和非abstract的成员方法.当然抽象方法是一定要有的. 抽象类是用于单一继承的,不能实例化.而继承类一定要实现抽象方法,因为抽象

Java中Overriding和Overloading的区别

override和overload的区别   方法重载 (1)方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型.重载Overloading是一个类中多态性的一种表现. (2)Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义.调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性. (3)重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相

【翻译】JAVA中抽象类和接口的区别

不知道有没有人翻译过了,这篇是挺简单的,权当复习一遍内容吧. 很多常见的面试问题如"抽象类和接口有什么区别","你在什么时候用抽象类什么时候用接口".所以在这篇文章里面,我们会讨论一下这个话题. 在开始讨论它们的区别之前,我们先看看它们的介绍. Abstract class 抽象类 抽象类被用来抽象出子类的共同特征.它是不能被实例化的,它只能被子类继承作为超类使用.抽象类被用作它的子类下的层次结构创建模板(Abstract classes are used to c

java中String与StringBuilder的区别

本篇文章介绍了,java中String与StringBuilder的区别. 相信大家对 String 和 StringBuffer 的区别也已经很了解了,但是估计还是会有很多同志对这两个类的工作原理有些不清楚的地方,今天我在这里重新把这个概念给大家复习一下,顺便牵出 J2SE 5.0 里面带来的一个新的字符操作的类—— StringBuilder (先别忙着扔我砖头,我还算清醒,我这里说的不是 C #, Java 也有 StringBuilder 类).那么这个 StringBuilder 和