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()都必须在构造函数的第一行进行调用,否则就是错误的
以上并非自己总结,有些来源网络,如有不同意见可以留言提出