關(guān)鍵字:this
this可以理解為當(dāng)前對象敌呈,或者當(dāng)前正在創(chuàng)建的對象诈闺。先通過一段代碼了解一下:
public class keywordTest {
public static void main(String[] args) {
Emp emp = new Emp("張三", 15);
String name = emp.changeName("李四");
System.out.println(name);
}
}
class Emp{
private int age;
private String name;
public Emp() {
}
public Emp(String name,int age) {
this.name = name;
this.age = age;
}
public String changeName(String name){
String oldName = this.name;
this.name = name;
return oldName;
}
如上述程序可知煤辨,在類的方法中竞滓,我們能夠定義與類的成員變量同名的參數(shù)作為形參變量沦偎,而區(qū)別是方法形參還是類的屬性就是依靠于this的方法疫向,面對這種情況,如果不顯示的使用this豪嚎,Java則無法分清哪個是類的屬性搔驼,哪個是形參。如果不發(fā)生這種沖突的情況下侈询,我們可以將this省略舌涨,作為隱式調(diào)用。在類的構(gòu)造器中妄荔,我們也可以通過this.屬性或this.方法的方式泼菌,調(diào)用正在創(chuàng)建的對象屬性或方法,但是我們通常都省略"this."啦租。特殊情況下哗伯,如果構(gòu)造器的形參和類的屬性同名時,我們必須顯式的使用"this.變量"的方式篷角,表明此變量是屬性焊刹,而非形參。
① 我們在類的構(gòu)造器中恳蹲,可以顯式的使用"this(形參列表)"方式虐块,調(diào)用本類中指定的其他構(gòu)造器
② 構(gòu)造器中不能通過"this(形參列表)"方式調(diào)用自己
③ 如果一個類中有n個構(gòu)造器,則最多有 n - 1構(gòu)造器中使用了"this(形參列表)"
④ 規(guī)定:"this(形參列表)"必須聲明在當(dāng)前構(gòu)造器的首行
⑤ 構(gòu)造器內(nèi)部嘉蕾,最多只能聲明一個"this(形參列表)"贺奠,用來調(diào)用其他的構(gòu)造器
關(guān)鍵字package與import
package:為了更好的實(shí)現(xiàn)項(xiàng)目中類的管理,提供包的概念错忱。
'package'就是包的意思儡率,使用package聲明類或接口所屬的包挂据,聲明在源文件的首行。
包也屬于一種標(biāo)識符儿普,遵循命名規(guī)則崎逃,其規(guī)范為xxx.yyy.zzz每‘.’一次就代表一層文件目錄
import:導(dǎo)入
- 在源文件中顯式的使用import結(jié)構(gòu)導(dǎo)入指定包下的類、接口
- 聲明在包的聲明和類的聲明之間
- 如果需要導(dǎo)入多個結(jié)構(gòu)眉孩,則并列寫出即可
- 可以使用"xxx.*"的方式个绍,表示可以導(dǎo)入xxx包下的所結(jié)構(gòu)
- 如果使用的類或接口是java.lang包下定義的,則可以省略import結(jié)構(gòu)
- 如果使用的類或接口是本包下定義的浪汪,則可以省略import結(jié)構(gòu)
- 如果在源文件中巴柿,使用了不同包下的同名的類,則必須至少一個類需要以全類名的方式顯示吟宦。
- 使用"xxx.*"方式表明可以調(diào)用xxx包下的所結(jié)構(gòu)篮洁。但是如果使用的是xxx子包下的結(jié)構(gòu),則仍需要顯式導(dǎo)入
- import static:導(dǎo)入指定類或接口中的靜態(tài)結(jié)構(gòu):屬性或方法殃姓。
關(guān)鍵字super
super:可以理解為父類的袁波,可以應(yīng)用于屬性,方法蜗侈,構(gòu)造器中篷牌。
super調(diào)用屬性,方法:
- 我們可以在子類的方法或構(gòu)造器中踏幻,通過使用super.屬性或super.方法枷颊,顯示調(diào)用父類聲明的屬性或方法,我們習(xí)慣省略super.
- 當(dāng)子類和父類中定義了同名的屬性時该面,我們要想在子類中調(diào)用父類中聲明的屬性夭苗,則必須顯式的使用"super.屬性"的方式,表明調(diào)用的是父類中聲明的屬性隔缀。
- 當(dāng)子類重寫了父類中的方法以后题造,我們想在子類的方法中調(diào)用父類中被重寫的方法時,則必須顯式的使用"super.方法"的方式猾瘸,表明調(diào)用的是父類中被重寫的方法界赔。
構(gòu)造器中 - 我們可以在子類的構(gòu)造器中顯式的使用"super(形參列表)"的方式,調(diào)用父類中聲明的指定的構(gòu)造器
- "super(形參列表)"的使用牵触,必須聲明在子類構(gòu)造器的首行淮悼!
- 我們在類的構(gòu)造器中,針對于"this(形參列表)"或"super(形參列表)"只能二一揽思,不能同時出現(xiàn)
- 在構(gòu)造器的首行袜腥,沒顯式的聲明"this(形參列表)"或"super(形參列表)",則默認(rèn)調(diào)用的是父類中空參的構(gòu)造器:super()
- 在類的多個構(gòu)造器中钉汗,至少一個類的構(gòu)造器中使用了"super(形參列表)"瞧挤,調(diào)用父類中的構(gòu)造器
class Emp{
private int age;
private String name;
public Emp() {
}
public Emp(String name,int age) {
this.name = name;
this.age = age;
}
public String changeName(String name){
String oldName = this.name;
this.name = name;
return oldName;
}
}
class Emptest extends Emp{
public Emptest() {
super();
}
public Emptest(String name, int age) {
super(name, age);
}
@Override
public String changeName(String name) {
return super.changeName(name);
}
}