Java 面向物件常見關鍵字
【許可權修飾符】
1.對 class 的許可權修飾只可以使用 public 和 default(預設),public 類可以在任何地方被訪問,default 類僅可唄同一個包內部的類訪問
2.對類的成員的許可權修飾有 public/protected/private 三種,用於限定物件對該類成員的許可權訪問
修飾符 | 類內部 | 同一個包 | 子類 | 任何地方 |
private | Yes | |||
default | Yes | Yes | ||
protected | Yes | Yes | Yes | |
public | Yes | Yes | Yes | Yes |
【this】
1)當成員變數與區域性變數名字相同時,成員變數會被隱藏,此時若想在成員方法中使用成員變數,需要使用關鍵字 this,this 可視為當前物件或當前正在建立的物件
class A{
int a;
private void setNum(int a){
this.a=a;
}
}
2)可以使用 this 關鍵字做返回值
public A getA(){
return this;
}
3)可以通過 this() 來顯式的呼叫當前類過載的指定的構造器
class A(){ private int a; private String b; public A(){ a=1; b="abc"; } public A(int a){ this(); this.a=2; } public A(int a,String b){ this(a); this.b=b; } }
4)在由 static 修飾的靜態方法中,不能出現 this
【import】
import 關鍵字用於載入已定義好的類或包,被載入的類可供本類呼叫其方法與屬性。
import 包名1.[包名2. ...].類名|*;
當存在多個包名時,各個包名間用 . 來間隔,同時包名與類名間也用 . 來間隔,也可用 * 來表示包中所有的類
【static】
由 static 修飾的屬性、方法、初始化塊、內部類統稱靜態結構,均存放在靜態域中,一經定義其記憶體地址不會改變,是可被整個類所共享的。
靜態結構的生命週期早於非靜態結構,同時被回收也晚於非靜態結構。
1)static 變數
① 隨著類的載入而被載入,早於物件,且僅被載入一次
② 由類建立的所有物件均共享這一屬性
③ 當其中一個物件對此屬性進行修改後,其他物件對此屬性的呼叫值為被修改後的值
④ 可以通過 類.屬性 的形式呼叫,也可通過 物件.屬性 的形式呼叫
2)static 方法
① 隨著類的載入而被載入,早於物件,且僅被載入一次
② 由類建立的所有物件均共享這一方法
③ 內部可以呼叫靜態屬性和靜態方法,而不能呼叫非靜態屬性和非靜態方法(非靜態方法內部可以呼叫靜態屬性和靜態方法)
④ 可以通過 類.方法 的形式呼叫
【final】
1)final 變數
final 修飾變數時,一旦獲得初值就不可再被改變。在其修飾成員變數時,若未在定義成員變數時指定初始值,則成員變數的值會一直是各型別的初始值(0/false/null);在其修飾區域性變數時,若未在定義成員變數時指定初始值,可在後面程式碼中對該區域性變數賦值,但只能賦值一次,若在定義成員變數時指定初始值,則不可再賦值
2)final 類
用 final 修飾的類稱為 final 類,該類不能被繼承,不可擁有子類,一些重要的類常宣告為 final 類(Java 提供的 System類、String 類等)
3)final 方法
用 final 修飾的方法稱為 final 方法,其不可被重寫,若想不允許子類重寫父類的某個方法,可將該方法作為 final 方法
4)一般使用 static final 來修飾全域性常量
【extends】
當類需要繼承時,通過 extends 來顯式地指明其父類
[public/abstract/final] class 子類名 extends 父類名{
類體
}
【super】
1)呼叫父類的構造方法
當子類需要顯式呼叫父類的構造方法時,需通過 super 來呼叫
super([引數列表]);
要注意的是,在構造器內部,super([引數列表]); 與 this([引數列表]); 只可出現一個,若不顯示的呼叫此兩者,預設呼叫父類空參的構造器
2)操作被隱藏的成員變數與被覆蓋的成員方法
若想在子類中操作父類被隱藏的成員變數和被覆蓋的成員方法,需要使用 super 來操作
super.成員變數;
super.成員方法([引數列表]);
注:若子類聲明瞭一個與父類成員變數同名的成員變數,此時稱子類成員變數隱藏了父類成員變數;若子類聲明瞭一個與父類成員方法同名的成員方法,此時稱子類成員方法覆蓋了父類成員方法。
3)在由 static 修飾的靜態方法中,不能出現 super
【abstract】
當需要宣告抽象類時,需要使用 abstract 來宣告,抽象類不能被例項化,可以沒有抽象方法。
abstract class 類名 {
類體
}
抽象方法亦需用 abstract 修飾,有抽象方法的類一定是抽象類,抽象方法沒有方法體,只保留了方法的功能,其具體實現交給繼承抽象類的子類,在子類中重寫此抽象方法。
若子類繼承抽象類,當重寫了全部的抽象方法時,則此類是一個實體類,可以例項化;當沒有重寫全部的抽象方法時,則此類中仍有抽象方法,意味著該子類必須宣告為抽象類。
abstract <方法返回值型別> 方法名 (引數列表);
不能用 abstract 來修飾屬性、構造器、private 方法、static 方法、final 方法