封裝,this,構造方法,四種訪問權限,super
- java封裝
- 封裝(Encapsulation)是面向對象方法的重要原則,就是把對象的屬性和操作(或服務)結合爲一個獨立的整體,並儘可能隱藏對象的內部實現細節。
- 在java中用d代碼實現,也就是把成員變量私有化,使用公開的方法去訪問(在方法中我們可以添加一些限制),從而可提高數據的安全性,有效性(getXXX訪問,setXXX改變)
- this
- this關鍵字指向的是當前對象的引用(簡單講就是誰指它就指向誰),this() 代表的是當前類的構造方法裏面可以寫參數也可以不寫(這就看自己的構造方法了)
- this 的作用 通常用於解決成員變量與局部變量重名的問題
- 構造方法
- 構造方法用於創建實例化對象
- 構造方法中可擁 0,1,2,3…個參數,當然構造方法也可以有多個,只要參數類型不同就好
- java中所有的類都是繼承的object類(在object類中有一個無參構造方法),所以當我們創建一個類之後,就算什麼都不寫也是可以調用無參構造方法的。
- 語法:public 類名(){} //無參構造方法
- java中的四種訪問修飾符
- 訪問修飾符可修飾類 ,成員變量,方法
本類 | 同包 | 子類 | 其他包 | |
---|---|---|---|---|
public | √ | √ | √ | √ |
protect | √ | √ | √ | × |
default | √ | √ | × | × |
private | √ | × | × | × |
- public: java中訪問權限最寬的修飾符(公有的),被它修飾的類、屬性以及方法不僅可以跨類訪問,而且允許跨包(package)訪問。
- private: java中權限最小的修飾符(私有的)。被它修飾的類、屬性以及方法只能被該類的對象訪問,其子類不能訪問,更不能允許跨包訪問。
- protect: 介於public 和 private 之間的一種訪問修飾符(保護形)。被它修飾的類、屬性以及方法只能被類本身的方法及子類訪問,即使子類在不同的包中也可以訪問。
- default:即不加任何訪問修飾符(默認訪問模式)。該模式下,只允許在同一個包中進行訪問。
- super
- super 與 this 非常相似 this 是代表的是本類,而super代表的是父類
- super可以點出父類非私有的方法與屬性
- super()代表的是父類的無參構造方法 ,當然裏面也能寫參數(調用的就是父類的有參構造),注意super() 只能放在 子類的構造方法中的第一行,不然就會報語法錯誤
接下來就是我們的代碼實現了
public class Teacher{ // 老師類
private String name;
private int age;
private String major;
// 上面的三個屬性都是私有的(外部是不能訪問的,現在我們可以寫幾個公開的方法來訪問)
// 這個get方法用於 返回 這個對象的屬性
public String getName(){
return this.name;
//this.name 指向的當前的引用對象(這裏this不寫也沒關係,因爲我們上面講了 this是用來解決屬性與
//局部變量重名的問題,這裏沒有重名所以不用也是可以的)
}
// 這個set方法用於 給我們的name屬性賦值
public void setName(String name){
// 當然我們也能在這裏面添加一點邏輯判斷,只有符合了纔給我們的屬性賦值,
//這樣就可以確保我們屬性數值的有效性
this.name = name;
//這裏就需要使用到 this 了因爲我們的屬性已經和這方法的參數重名了 this.name 代表的是我們的屬性
//name 在這方法裏面代表的是這個方法的參數
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age = age;
}
public int getMajor(){
return major;
}
public void setMajor(int major){
this.major = major;
}
}
以上的使用公開方法訪問私有的屬性 就是我們的屬性封裝了,以及this的使用
public class Teacher{ // 老師類
private String name;
private int age;
private String major;
// 構造方法的訪問修飾符通常都是 public 因爲我們的對象本來就是給別人訪問的,如果你寫個私有的,,,
//額那麼是不是就沒意義了
public Teacher(){
}
public Teacher(String name , int age , major){
this.name = name;
this.age = age;
this.major = major;
}
}
注意當我們自己寫了一個構造方法後 原先的無參構造方法就沒用了
因爲在我們java中 所有的類是繼承與object類的 當我們的子類重寫了父類的方法,那麼父類原先的方法就會被子類的給取代