首頁 > Java > Java入門 > java物件導向-封裝

java物件導向-封裝

王林
發布: 2019-11-28 14:12:50
轉載
2259 人瀏覽過

java物件導向-封裝

概述

物件導向程式語言是客觀世界的模擬,客觀世界裡成員變數都是隱藏在物件內部的,外界無法直接操作和修改。封裝可以被認為是一個保護屏障,防止該類別的程式碼和資料被其他類別隨意存取。要存取該類別的數據,必須透過指定的方式。

適當的封裝可以讓程式碼更容易理解與維護,也加強了程式碼的安全性。

原則

將屬性隱藏起來,若需要存取某個屬性,提供公共方法對其存取。

封裝的步驟

使用 private 關鍵字來修飾成員變數。

對需要存取的成員變量,提供對應的一對 getXxx 方法 、 setXxx 方法。

java學習影片推薦:java線上教學

封裝的操作—private關鍵字

private的意思:

private是一個權限修飾符,代表最小權限,可以修飾成員變數和成員方法,被private修飾後的成員變數和成員方法,只在本類別中才能存取。

private的使用格式

private 数据类型 变量名 ;
登入後複製

使用private 修飾成員變量,程式碼如下:

java物件導向-封裝

#提供getXxx 方法/ setXxx 方法,可以存取成員變量,程式碼如下:

java物件導向-封裝

#封裝優化1——this關鍵字

java物件導向-封裝

##我們發現setXxx 方法中的形參名字並不符合見名知意的規定,那麼如果修改與成員變數名稱一致,是否就見名知意了呢?程式碼如下:

經過修改和測試,我們發現新的問題,成員變數賦值失敗了。也就是說,在修改了 setXxx() 的形參變數名後,方 法並沒有給成員變數賦值!這是由於形參變數名與成員變數名重名,導致成員變數名被隱藏,方法中的變數名,無法存取成員變量,從而賦值失敗。所以,我們只能使用this關鍵字,來解決這個重名問題。

this的意思

this代表所在類別的目前物件的參考(位址值),即物件自己的參考。

記住 :方法被哪個物件調用,方法中的this就代表那個物件。即誰在調用,this就代表誰。

this使用格式:

this.成员变量名;
登入後複製
public class Student {  
	private String name;  
	private int age;
	public void setName(String name) {
		//name = name;  
		this.name = name;
	}
	public String getName() {  
		return name;
	}
	public void setAge(int age) {
		//age = age; 
		this.age = age;
	}
	public int getAge() {  
		return age;
	}
}
登入後複製

#提示:方法中只有一個變數名稱時,預設也是使用 this 修飾,可以省略不寫。 java物件導向-封裝

封裝最佳化2-建構方法

當一個物件被建立時候,建構方法用來初始化該對象,為物件的成員變數賦初始值。 java物件導向-封裝

提示:無論你與否自訂建構方法,所有的類別都有建構方法,因為Java自動提供了一個無參數建構方法, 一旦自己定義了建構方法,Java自動提供的預設無參數構造方法就會失效。

建構方法的定義格式:

######建構方法的寫法上,方法名稱與它所在的類別名稱相同。它沒有傳回值,所以不需要傳回值類型,甚至不需要void。使用建構方法後,程式碼如下:##################注意事項:#########如果你不提供建構方法,系統會給予無參數構造方法。 ######如果你提供了建構方法,系統將不再提供無參數建構方法。 ######建構方法是可以重載的,既可以定義參數,也可以不定義參數。 ###

标准代码——JavaBean

JavaBean 是 Java语言编写类的一种标准规范。符合 JavaBean 的类,要求类必须是具体的和公共的,并且具有无 参数的构造方法,提供用来操作成员变量的 set 和 get 方法。

java物件導向-封裝

编写符合 JavaBean 规范的类,以学生类为例,标准代码如下:

java物件導向-封裝

测试类,代码如下:

public class TestStudent {
	public static void main(String[] args) {
		//无参构造使用
		Student s= new Student();  
		s.setName(" 柳 岩 "); 
		s.setAge(18);
		System.out.println(s.getName()+"‐‐‐"+s.getAge());
		//带参构造使用
		Student s2= new Student(" 赵 丽 颖 ",18);  
		System.out.println(s2.getName()+"‐‐‐"+s2.getAge());
	}
}
登入後複製

推荐相关文章教程:java语言入门

以上是java物件導向-封裝的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板