java 中this 与super_Java中this与super的区别以及用法

super()用法

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

1 classAnimal {2 publicAnimal() {3 System.out.println("我是一只动物");4 }5 }6 class Cat extendsAnimal {7 publicCat() {8 super();//必须放在这里9 System.out.println("我是一只小猫");10 //super();//放在这里会报错11 //如果子类构造函数中没有写super()函数,编译器会自动帮我们添加一个无参数的super()

12 }13 }14 classTest{15 public static voidmain(String [] args){16 Cat cat = newCat();17 }18 }

输出结果如下:

我是一只动物

我是一只小猫

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

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

执行顺序如下:

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

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

3.构造方法

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

1 classA {2 publicA() {3 System.out.println("A的构造方法");4 }5

6 public static int j =print();7

8 public static intprint() {9 System.out.println("A print");10 return 521;11 }12 }13

14 public class Test1 extendsA {15 publicTest1() {16 System.out.println("Test1的构造方法");17 }18

19 public static int k =print();20

21 public static intprint() {22 System.out.println("Test print");23 return 522;24 }25

26 public static voidmain(String[] args) {27 System.out.println("main start");28 Test1 t1 = newTest1();29 }30 }

运行结果如下:

A print

Test print

main start

A的构造方法

Test1的构造方法

这是一个带参数的super方法

1 classAnimal {2 privateString name;3 publicString getName(){4 return this.name;5 }6 publicAnimal(String name) {7 this.name =name;//这里将参数“小狗”传入给Animal中的name8 }9 }10 class Dog extendsAnimal {11 publicDog(String name) {12 super(name);13 }14 }15 classTest{16 public static voidmain(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; //定义一个成员变量nameprivate 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()都必须在构造函数的第一行进行调用,否则就是错误的

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值