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的区别以及用法的主要内容,如果未能解决你的问题,请参考以下文章