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

Posted xin-felix

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()都必须在构造函数的第一行进行调用,否则就是错误的

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

以上是关于Java中this与super的区别以及用法的主要内容,如果未能解决你的问题,请参考以下文章

在Java中super和this的区别

详解Java中super的几种用法并与this的区别

Java中super的几种用法并与this的区别

Java中super的几种用法并与this的区别

JAVA小白要努力-----关于static的用法以及this与super的 “相爱相杀”

this与super的区别