Java 封裝
封裝是指一種將抽象性函式接口的實現細節部分包裝、隱藏起來的方法
封裝可以被認為是一個保護屏障,防止該類的代碼和數據被外部類定義的代碼隨機訪問
要訪問該類的代碼和數據,必須通過嚴格的接口控制
封裝最主要的功能在於能夠修改自己的實現代碼,而不用修改那些調用代碼的程序片段
-
封裝的優點
良好的封裝能夠減少耦合、類內部的結構可以自由修改、可以對成員變量進行更精確的控制、隱藏信息,實現細節 -
實現Java封裝的步驟
public class EncapTest{ // 修改屬性的可見性來限制對屬性的訪問(一般限制為`private`) private String name; private String idNum; private int age; //對每個值屬性提供對外的公共方法訪問,即創建一對賦取值方法,用於對私有屬性的訪問 public int getAge() { return age; } public String getName() { return name; } public String getIdNum() { return idNum; } public void setAge(int newAge) { age = newAge; } public void setName(String newName) { name = newName; } public void setIdNum(String newId) { idNum = newId; } } //變量如何被訪問 public class RunEncap{ public static void main(String args[]) { EncapTest encap = new EncapTest(); encap.setName("James"); encap.setAge(20); encap.SetIdNum("1234"); System.out.print("Name:" + encap.getName() + "Age:" + encap.getAge()); } }
接口
接口是一個抽象類型,是抽象方法的集合,接口通常以interface
來聲明;一個類通過繼承接口的方式,從而來繼承接口的抽象方法
接口並不是類,編寫接口的方式和類很相似,但是它們屬於不同概念。類描述對象的屬性和方法;接口則包含類要實現的方法
除非實現接口放入類是抽象類,否則該類要定義接口中的所有方法
接口無法被實例化,但是可以被實現。一個實現接口的類,必須實現接口內所描述的所有方法,否則就必須聲明為抽象類
-
接口與類相似點
- 一個接口可以有多個方法
- 接口文件保存在.java結尾的文件中,文件名使用接口名
- 接口的字節碼文件保存在.class結尾的文件中
- 接口相應的字節碼文件必須在與包名稱相匹配的目錄結構中
-
接口與類的區別
- 接口不能用於實例化對象
- 接口沒有構造方法
- 接口中所有的方法必須是抽象方法
- 接口不能包含成員變量,除了
static
和final
變量 - 接口不是被類繼承了,而是要被類實現
- 接口支持多繼承
-
接口的聲明
[可見度] interface 接口名稱 [extends 其他的類名] { //聲明變量 //抽象方法 }
-
實例
interface Animal { public void eat (); public void traval (); }
-
接口的實現
當類實現接口的時候,類要實現接口中所有的方法;類使用implements
關鍵字實現接口public class MammalInt implements Animal{ public void eat() { System.out.println("Mammal eats"); } public void traval() { System.out.println("Mammal travels"); } public int noOfLegs() { return 0; } public static void main(String args[]) { MamamlInt m = new MammalInt(); m.eat(); m.traval(); } }
-
重寫接口中聲明的方法時,需要注意以下規則
- 類在實現接口的方法時,不能拋出強制性異常,只能在接口中,或者繼承接口的抽象類中拋出該強制性異常
- 類在重寫方法時要保持一致的方法名,並且應該保持相同或者相兼容的返回值類型
- 如果實現接口的類是抽象類,那么就沒必要實現該接口的方法
-
在實現接口的時候,需要注意
- 一個類可以同時實現多個接口
- 一個類只能繼承一個類,但是能實現多個接口
- 一個接口能繼承另一個接口
-
接口的繼承--使用
extends
關鍵字,子接口繼承父接口的方法// Sport.java public interface Sports { public void setHomeTeam(String name); public void setVisitingTeam(String name); } // Football.java public interface Football extends Sports { public void homeTeamScored(int points); public void visitingTeamScored(int points); public void endOfQuarter(int quarter); } // Hockey.java public interface Hockey extends Sports { public void homeGoalScored(); public void visitingGoalScored(); public void endOfPeriod(int period); public void overtimePeriod(int ot); }
-
接口的多繼承
public interface Hockey extends Sports, Event