1.認識封裝
簡單的一句話就是套殼屏蔽細節。
比如說一部手機,裡面有電池,晶片,主機板,鏡頭,螢幕,等等電子裝置。
對於我們用戶來說,會開關機,調音量,會操作使用接打電話等作用就可以了,
不需要考慮內部的線路是怎麼樣的,電子器件是什麼型號的,這些都不用管。
所以手機廠商會用外殼把裡面的電子裝置包裹起來,讓使用者使用更方便,就是這一種想法
和我們的在物件導向的核心特性之一的封裝相似。
比較正式的講就是:將資料和操作資料的方法進行有機結合,隱藏物件的屬性和實作細節,只對外公開介面來和物件進行互動
依照我的通俗理解就是,比如說,和人進行交流,具體他是怎麼發出聲音,這一系列過程我不關注,我只需聽他講出什麼話,就可以了
2.控制訪問權限-存取修飾符
既然java中封裝是只留下接口,和物件進行交互,那麼如何實現這種接口,將裡面的細節進行控制隱藏,這就要提到訪問修飾符了
存取修飾符作用:透過控制類別和存取權限來實現封裝
類別可以將資料和封裝資料的方法結合在一起,
而存取權限用來控制方法或欄位能否直接在類別外使用
範圍 |
#private
私有
|
default
預設
|
protected
」繼承
|
public
公開
|
#相同套件中的相同類別 |
✓ |
✓ |
# ✓ |
✓ |
同一套件中的不同類別 |
# |
✓ | ##✓ | ✓ |
不同套件中的子類別 | | # | ✓ | ✓ |
不同套件中的非子類別 | | | ##✓ |
|
????(公開)public:在任何地方都可以存取它修飾的成員,方法或類別。
????(繼承)protected:看後面,
????(預設)default:在同一個套件中進行存取
???? (私有)private:只能在目前類別中進行存取
public class TestDemo01 {
int year;
//默认权限,可以省略default
private int month;
//私有权限,只能在同一个类中访问
public int day;
//公有权限,那里都能访问
}
登入後複製
以下示範
在第一個類別TestDemo01中
# #在二個類別TestDemo02中
我們發現,找不到month,這是因為我們把它的存取權限寫成了private,變成私有的了,別的類別不能存取。這就是實作封裝了,month只能在TestDemo01中使用。 我們實作封裝是為了只留下接口,不展示細節,下面我們示範封裝後的介面
如果說有很多成員都是私有的,我們可以不用一個一個寫這兩個接口,可以藉助idea的功能來快速寫出,
3.理解封裝必須要知道-包
3.1理解包的概念
#包的存在是為了更好的管理類,把多個類收集在一起成為一組,進行分組和目錄相似
套件是對類別、介面等的封裝機制的體現,是一種對類別或介面等的很好的組織方式,
套件還有一個很作用是,在同一個工程中允許存在相同名稱類,只要處在不同的套件中即可。
3.2 導入套件中的類別
下面再看為什麼會報錯
怎麼解決這種問題,那就要指定具體的套件了package com.toabao.www;
import java.util.*;
import java.sql.*;
public class TestDemo03 {
public static void main(String[] args) {
int[] array = {1,2,3,4,5};
System.out.println(Arrays.toString(array));
java.util.Date date = new java.util.Date();
java.sql.Date date1 = new java.sql.Date(12);
}
}
登入後複製
使用import static導入套件中靜態的方法和欄位import static java.lang.Math.*;
public class TestDemo01 {
public static void main(String[] args) {
double x = 13;
double y = 14;
double result = sqrt(pow(x,2)+pow(y,2));
}
}
登入後複製
3.3 自訂套件
先看步驟,不會的大家可以試著自己創建一個包
#注意:
1. 包創建好後,在文件中,最上方都要有一句package語句來說明在文件在哪個包中(idea會自動添加)
2. 包的命名,一般會比如說是網域的反過來的名字
3.我們可以在存放代碼的位置看一下,剛剛創建好的包
##3.4 包的存取權限控制同一個套件中的相同類別
package Demo01;
public class Test01 {
int count = 10;
public void func(){
System.out.println(count);
}
}
登入後複製
在同一個套件中不同的類別的存取
在不同套件中的子類別前面的count的存取權限是預設的,也就是default,不能存取不同套件中的子類別和非子類別
如果非要存取可以將存取權限改成public,
######################3.5 java中常見的套件######1. java.lang:系統常用基礎類別(String、Object),JDK1.1後就不用寫了,會自動導入,######2. java.lang.reflflect:java 反射程式包###### #3. java.net:進行網頁程式開發套件######4. java.sql:進行資料庫開發的支援套件######5. java.util:是java提供的工具套件# #####6. java.io:I/O程式開發套件###
以上是如何進行物件導向的封裝在Java中實作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!