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 }
輸出結果以下:this
我是一隻動物
我是一隻小貓
在此介紹下程序運行的順序spa
首先main方法固然是程序入口,其次執行main方法裏的代碼,但並非按順序執行的,code
執行順序以下:對象
1.靜態屬性,靜態方法聲明,靜態塊。blog
2.動態屬性,普通方法聲明,構造塊。繼承
3.構造方法get
注意:若是存在繼承關係,通常都是先父類而後子類。編譯器
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 }
執行結果以下:
小狗
(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;
不一樣點:
一、super()主要是對父類構造函數的調用,this()是對重載構造函數的調用
二、super()主要是在繼承了父類的子類的構造函數中使用,是在不一樣類中的使用;this()主要是在同一類的不一樣構造函數中的使用
相同點:
一、super()和this()都必須在構造函數的第一行進行調用,不然就是錯誤的
以上並不是本身總結,有些來源網絡,若有不一樣意見能夠留言提出