目錄
封裝
封裝隱藏了類的內部實現機制,可以在不影響使用的情況下改變類的內部結構,同時也保護了數據。對外界而已它的內部細節是隱藏的,暴露給外界的只是它的訪問方法。
代碼理解
public class Student {
public Student(String name, Integer age) {
this.name = name;
this.age = age;
}
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
核心要點
- 數據是私有的
- 獲取只能通過getter方法
- 更改只能通過setter方法
注意要點
getter方法禁止返回可變對象的引用,可變對象引用會破壞封裝(下面演示錯誤的使用封裝方法)
public class Student { public Student(Date birthday) { this.birthday = birthday; } private Date birthday; public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } } class Main{ public static void main(String[] args) { Student student = new Student(new Date()); System.out.println("student對象的Date:"+student.getBirthday());//student對象的Date:Tue Dec 11 10:50:50 CST 2018 Date birthday = student.getBirthday(); birthday.setTime(888888888); System.out.println("student對象的Date:"+student.getBirthday());//student對象的Date:Sun Jan 11 14:54:48 CST 1970 } }
繼承
通過繼承創建的新類稱爲“子類”或“派生類”,被繼承的類稱爲“基類”、“父類”或“超類”。繼承的過程,就是從一般到特殊的過程。繼承概念的實現方式有二類:實現繼承與接口繼承。實現繼承是指直接使用基類的屬性和方法而無需額外編碼的能力;接口繼承是指僅使用屬性和方法的名稱、但是子類必須提供實現的能力;
代碼理解
public class Student extends People {
}
class People{
void sayHello(){
System.out.println("Hello Word");
}
}
class Main{
public static void main(String[] args) {
Student student = new Student();
student.sayHello();
}
}
核心要點
- 子類會繼承父類的非private的屬性和方法
- 可以在子類構造器中使用super關鍵字對父類private私有與域進行初始化
- 在類的繼承層次中可以使用abstract定義抽象類作爲派生其他類的基類
- 包含一個或者多個的抽象方法必須聲明爲抽象類
- 抽象類不可以被實例化
- 子類實現所有的抽象方法後不再是抽象類
- 抽象類的層次中可以使用多態既抽象類對象變量引用非抽象類子類實例
多態
一個對象變量可以指向多種實際類型的現象被成爲多態;在運行時能夠自動選擇調用那個方法被稱爲動態綁定.
代碼理解
public class Student extends People {
@Override
void sayHello(){
System.out.println("I am a Student");
}
void studentHello(){
System.out.println("It is student Say");
}
}
class Teacher extends People{
}
class People{
void sayHello(){
System.out.println("Hello Word");
}
}
class Main{
public static void main(String[] args) {
People people1 = new Teacher();
People people2 = new Student();
people1.sayHello();
people2.sayHello();
((Student) people2).studentHello();
}
}
核心要點
要實現多態必須存在繼承關係(student和teacher都繼承people)
子類需要將父類的方法重寫(繼承已經默認重寫),如果重寫了父類方法則會使用重寫方法
需要將子類的引用賦值給父類,這樣父類變量就可以調用非子類特有方法
父類引用不可以賦值給子類變量,如果必須需要;可以使用強制類型轉換,強制類型轉換會暫時忽略對象的實際類型,使用對象的全部功能
Student student = (Student) new People();