第一章 物件和封裝
- 物件和類的區別
- 定義類的方法
- 封裝的好處及步驟
(1)物件是類的例項,類的物件的抽象:簡單來說就是這樣,類是一個抽象的東西它裡面可以放有很多的屬性和方法。當我們想要使用到類中的方法時就要對這個類進行例項化,也就是建立這個類的物件,來呼叫類中的方法或者使用類中的屬性。我們可以由一個類建立多個物件
(2)定義類的方法,第一步:發現類 第二步:發現類的屬性 第三步:發現類的方法。 這樣你就可以定義出一個你所需要的類。
(3)封裝的好處在於,隱藏類的內部細節;讓使用者只能通過程式規定的方法來訪問資料;可以方便地加入存取控制語句,限制不合理操作。
單詞:
-
class:類
-
object:物件
- static:靜態
-
finail:java中用來定義常量的關鍵字
- private:私有
-
public:公有
- protect:保護
-
penguin:企鵝
- health:健康
-
love:愛
1.2.1 建立類和物件
下面就是一個類:
public class Penguin{ String name = "無名氏"; int health = 100; int love = 0; String sex= "Q仔"; public void print(){ System.out.println("寵物名"+this.name+"健康值:"+this.health+"親密度:"+this.love+"性別:"+this.sex+"。"); } }
那麼怎麼建立一個物件呢?
我們通常是:
通過構造方法來建立物件,如
Penguin p = new Penguin();
想要呼叫其中的屬性的話通過物件名.屬性名的方式呼叫屬性。如
p.name = "qq";
呼叫方法通過 ==》 物件名.方法名。 如
p.print();
Java中的常量,使用關鍵字 ”final“ 來修飾,並且常量名通常為大寫。如
final String SEX_MALE = "Q仔"; final String SEX_FEMALE = "Q妹";
常量是指在定義完了以後就不能被修改的一個屬性,常量在程式執行過程中不會發生變化,只能被引用,不能被重新賦值,也就是隻能在定義時修改其值。
1.2.2 構造方法及其過載
什麼是構造方法?構造方法就是名稱和類名相同,沒有返回值型別的方法。構造方法的主要作用就是在建立物件的過程中執行一些初始化操作,如給成員屬性賦初始值。
知識點==》Java和C#一樣,在沒有給類提供任何構造方法時,系統會提供一個無參的方法體為空的預設構造方法。一旦提供了自定義構造方法,系統將不再提供這個預設的無參構造方法。如果要使用它,則程式設計師要自己手動新增一個無參構造方法。
方法的過載:方法名相同引數型別不同或者個數不同 返回值不要求。
1.2.3 static修飾符
static修飾符可以用來修飾屬性、方法和程式碼塊。static修飾的變數稱為類變數(類屬性)方法稱為類方法。不使用static修飾的屬性和方法屬於單個物件,稱為實力屬性和例項方法。
在方法裡不可以定義static變數,也就時說,類變數不能時區域性變數。(不能在方法裡定義靜態屬性)
封裝是面向物件的三大特性之一,就是將類的狀態資訊隱藏在類的內部,不允許外部程式直接訪問,而通過該類提供的方法來實現對隱藏資訊的操作和訪問。
封裝的具體步驟:修改屬性的可見性來限制對屬性的訪問;為每個屬性船艦一對賦值(setter)方法和取值(getter)方法。用於對這些屬性的存取;在賦值方法中,加入對屬性的存取控制語句。
封裝的好處:隱藏類的實現細節;讓使用這隻能通過程式規定的方法來訪問資料;可以方便地加入存取控制語句,限制不合理操作。
封裝時會用到多個許可權控制來修飾成員變數和方法,區別如下:
1、public:public表明該資料成員、成員函式是對所有使用者開放的,所有使用者都可以直接進行呼叫
2、private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有財產神聖不可侵犯嘛,即便是子女,朋友,都不可以使用。
3、protected:protected對於子女、朋友來說,就是public的,可以自由使用,沒有任何限制,而對於其他的外部class,protected就變成private。
作用域 當前類 同一package 子孫類 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
不寫時預設為friendly
1.2.4 使用this關鍵字
this關鍵字是對一個物件的預設引用。在每個例項方法內部,都有一個this引用變數,指向呼叫這個方法的物件。
this使用的例項:
public void set Name(String name){ this.name=name; //成員變數和區域性變數同名,必須使用this } public void setName(String xm){ name=xm; //成員變數和區域性變數不同名,this可以不使用this }
使用this呼叫成員方法:
public void play(int n){ health = health - n; this.print(); //this可以忽略,直接呼叫print(); }
使用this呼叫過載的構造方法,只能在構造方法中使用,必須是構造方法的第一條語句。
public Penguin(String name ,String sex){ this.name = name ; this.sex = sex; } public Penguin(String name,int health,int love,String sex){ this(name,health); this.love = love; this.sex = sex; }
知識點==》因為this在物件內部指代自身的引用,所以this只能嗲用例項變數、例項方法和構造方法。
this不能呼叫類變數和類方法(靜態方法,靜態變數),也不能呼叫區域性變數。