1. 程式人生 > >Java 面向物件常見關鍵字

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 方法