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 }

輸出結果以下: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 }

執行結果以下:

小狗

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;

 

不一樣點:
一、super()主要是對父類構造函數的調用,this()是對重載構造函數的調用
二、super()主要是在繼承了父類的子類的構造函數中使用,是在不一樣類中的使用;this()主要是在同一類的不一樣構造函數中的使用


相同點:
一、super()和this()都必須在構造函數的第一行進行調用,不然就是錯誤的

以上並不是本身總結,有些來源網絡,若有不一樣意見能夠留言提出

相關文章
相關標籤/搜索