程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 詳解Java中super的幾種用法並與this的差別

詳解Java中super的幾種用法並與this的差別

編輯:關於JAVA

詳解Java中super的幾種用法並與this的差別。本站提示廣大學習愛好者:(詳解Java中super的幾種用法並與this的差別)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解Java中super的幾種用法並與this的差別正文


1. 子類的結構函數假如要援用super的話,必需把super放在函數的首位

class Base {

Base() {

System.out.println("Base");

}

}


public class Checket extends Base {

Checket() {

super();//挪用父類的結構辦法,必定要放在辦法的首個語句

System.out.println("Checket");

}

 

public static void main(String argv[]) {

Checket c = new Checket();

}

}

假如想用super繼續父類結構的辦法,然則沒有放在第一行的話,那末在super之前的語句,確定是為了知足本身想要完成某些行動的語句,然則又用了super繼續父類的結構辦法。那末之前所做的修正就都回到之前了,就是說又成了父類的結構辦法了。

 

2.在Java中,有時還會碰到子類中的成員變量或辦法與超類(有時也稱父類)中的成員變量或辦法同名。由於子類中的成員變量或辦法名優先級高,所以子類中的同名成員變量或辦法就隱蔽了超類的成員變量或辦法,然則我們假如想要應用超類中的這個成員變量或辦法,就須要用到super.

class Country {

String name;

 

void value() {

name = "China";

}

}

 

class City extends Country {

String name;

 

void value() {

name = "Hefei";

super.value();//不挪用此辦法時,super.name前往的是父類的成員變量的值null

System.out.println(name);

System.out.println(super.name);

}

 

public static void main(String[] args) {

City c=new City();

c.value();

}

}

為了在子類中援用父類中的成員變量name和辦法value(),在代碼中應用了super、super.name和super.value(),若不挪用super.value()時,super.name前往父類成員變量默許值null,挪用此辦法時,super.value()辦法把成員變量name賦值為China,再應用super.name挪用父類的成員變量的值。

別的,要留意的是super.name挪用的是成員變量的值,

class Country {

String name="xianfan";

 

String value(String name) {

name = "China";

return name;

}

}

 

class City extends Country {

String name;

 

String value(String name) {

name = "Hefei";

super.value("掉敗");//不挪用此辦法時,super.name前往的是父類的成員變量的值null

System.out.println(name);

System.out.println(super.name);

return name;

}

 

public static void main(String[] args) {

City c=new City();

c.value("勝利");

}

}

成果為:Hefei

xianfan

此時,super.name前往的值是父類成員變量的值xianfan,而此時的super.value()辦法是不起感化的。

 

3.用super直接傳遞參數:

class Person {

public static void prt(String s) {

System.out.println(s);

}

 

Person() {

prt("A Person.");

}

 

Person(String name) {

prt("A person name is:" + name);

}

}

 

public class Chinese extends Person {

Chinese() {

super(); // 挪用父類結構函數(1)

prt("A chinese.");// (4)

}

 

Chinese(String name) {

super(name);// 挪用父類具有雷同形參的結構函數(2)

prt("his name is:" + name);

}

 

Chinese(String name, int age) {

this(name);// 挪用以後具有雷同形參的結構函數(3)

prt("his age is:" + age);

}

 

public static void main(String[] args) {

Chinese cn = new Chinese();

cn = new Chinese("kevin");

cn = new Chinese("kevin", 22);

}

}

成果為:A Person.

A chinese.

A person name is:kevin

his name is:kevin

A person name is:kevin

his name is:kevin

his age is:22

在這段法式中,this和super不再是像之前那樣用“.”銜接一個辦法或成員,而是直接在厥後跟上恰當的參數,是以它的意義也就有了變更。super後加參數的是用來挪用父類中具有雷同情勢的結構函數,如1和2處。this後加參數則挪用的是以後具有雷同參數的結構函數,如3處。固然,在Chinese的各個重載結構函數中,this和super在普通辦法中的各類用法也仍可以使用,好比4處,你可以將它調換為“this.prt”(由於它繼續了父類中的誰人辦法)或許是“super.prt”(由於它是父類中的辦法且可被子類拜訪),它照樣可以准確運轉。但如許仿佛就有點弄巧成拙的滋味了。

4.super和this的異同:

1)super(參數):挪用基類中的某一個結構函數(應當為結構函數中的第一條語句) 

2)this(參數):挪用本類中另外一種構成的結構函數(應當為結構函數中的第一條語句)
3)super: 它援用以後對象的直接父類中的成員(用來拜訪直接父類中被隱蔽的父類中成員數據或函數,基類與派生類中有雷同成員界說時如:super.變量名    super.成員函數據名(實參)

4)this:它代表以後對象名(在法式中易發生二義性的地方,應應用this來指明以後對象;假如函數的形介入類中的成員數據同名,這時候需用this來指明成員變量名)

5)挪用super()必需寫在子類結構辦法的第一行,不然編譯欠亨過。每一個子類結構辦法的第一條語句,都是隱含地挪用super(),假如父類沒有這類情勢的結構函數,那末在編譯的時刻就會報錯。

6)super()和this()相似,差別是,super()從子類中挪用父類的結構辦法,this()在統一類內挪用其它辦法。

7)super()和this()均需放在結構辦法內第一行。

8)雖然可以用this挪用一個結構器,但卻不克不及挪用兩個。

9)this和super不克不及同時湧現在一個結構函數外面,由於this必定會挪用其它的結構函數,其它的結構函數必定也會有super語句的存在,所以在統一個結構函數外面有雷同的語句,就掉去了語句的意義,編譯器也不會經由過程。

10)this()和super()都指的是對象,所以,均弗成以在static情況中應用。包含:static變量,static辦法,static語句塊。

11)從實質上講,this是一個指向本對象的指針, 但是super是一個Java症結字。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved