Java三大特性[封装,继承,多态]
封裝
封裝是使類中的成員變量都是private,并提供public方法訪問這些變量的技術(shù)
實現(xiàn)封裝:
?
1)、修改屬性的可見性來限制對屬性的訪問。
?
2)、為每個屬性創(chuàng)建一對賦值方法和取值方法,用于對這些屬性的訪問。
?
3)、在賦值和取值方法中,加入對屬性的存取的限制。
?
用get方法訪問成員變量,用set方法獲取成員變量。
例如:
//員工類
public class Employee{
?private String name;//名字
?private String gender;//性別
......
}
//set方法獲取名字
public void setName(String name){
this.name=name;
}
//get方法訪問名字
public String getName(){
return this.name;
}
封裝的好處:
?
通過封裝,可以實現(xiàn)對屬性的數(shù)據(jù)訪問限制,同時增加了程序的可維護性。
?
由于取值方法和賦值方法隱藏了實現(xiàn)的變更,因此并不會影響讀取或修改該屬性的類,避免了大規(guī)模的修改,程序的可維護性增強。
?
?
繼承
1:extends 關(guān)鍵字
public class Employee {
String name;
Date hireDate;
Date dateOfBirth;
String jobTitle;
int grade;
... }
public class Manager extends Employee {
String department;
Employee[] subordinates;
... }
在這樣的定義中,Manager 類被定義,具有 Employee 所擁有的所有變量及方法。所有 這些變量和方法都是從父類的定義中繼承來的。
2:初始化子類必先初始化父類
在 Java 編程語言中,對象的初始化是非常結(jié)構(gòu)化的,這樣做是為了保證安全。在前面 的模塊中,看到了當(dāng)一個特定對象被創(chuàng)建時發(fā)生了什么。由于繼承性,對象被完成,而且下 述行為按順序發(fā)生:
(1)存儲空間被分配并初始化到 0 值
(2)進行顯式初始化
(3)調(diào)用構(gòu)造方法
3.單繼承性:
當(dāng)一個類從一個唯一的類繼承時,被稱做單繼承性。單繼承性使代碼更可靠。 接口提供多繼承性的好處,而且沒有(多繼承的)缺點。 Java 編程語言允許一個類僅能繼承一個其它類,即一個類只能有一個父類。這個限制 被稱做單繼承性
4:構(gòu)造方法不能被繼承 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
盡管一個子類從父類繼承所有的方法和變量,但 它不繼承構(gòu)造方法,掌握這一點很重要。 一個類能得到構(gòu)造方法,只有兩個辦法。或者寫構(gòu)造方法,或者根本沒有寫構(gòu)造方法, 類有一個默認的構(gòu)造方法。?
5:關(guān)鍵字 super ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
關(guān)鍵字 super 可被用來引用該類的父類,它被用來引用父類的成員變量或方法
super 關(guān)鍵字的功能:
(1):點取父類中被子類隱藏了的數(shù)據(jù)成員
(2):點取已經(jīng)覆蓋了的方法
(3):作為方法名表示父類構(gòu)造方法
例如: public class Employee {
private String name;
private int salary;
public String getDetails() {
return "Name: " + name + "\nSalary: " + salary; }
}
?
public class Manager extends Employee {
private String department;
public String getDetails() {
return super.getDetails() + // 調(diào)用父類的方法 "\nDepartment: " + department; }
}
6:調(diào)用父類構(gòu)造方法 在許多情況下,使用默認構(gòu)造方法來對父類對象進行初始化。 當(dāng)然也可以使用 super 來顯示調(diào)用父類的構(gòu)造方法。
public class Employee {
String name;
public Employee(String n) {
this.name = n;
}
}
public class Manager extends Employee {
String department;
public Manager(String s, String d) {
super(s);
department = d;
}
}
注意:無論是 super 還是 this,都必須放在構(gòu)造方法的第一行
?多態(tài)
多態(tài)是面向?qū)ο蟮闹匾匦?簡單點說:“一個接口,多種實現(xiàn)”,就是同一種事物表現(xiàn)出的多種形態(tài)。
多態(tài)存在的三個必要條件
一、要有繼承;
二、要有重寫;
三、父類引用指向子類對象。
多態(tài)的好處:
1.可替換性(substitutability)。多態(tài)對已存在代碼具有可替換性。
2.可擴充性(extensibility)。多態(tài)對代碼具有可擴充性。增加新的子類不影響已存在類的多態(tài)性、繼承性,以及其他特性的運行和操作。實際上新加子類更容易獲得多態(tài)功能。
3.接口性(interface-ability)。多態(tài)是超類通過方法簽名,向子類提供了一個共同接口,由子類來完善或者覆蓋它而實現(xiàn)的。
4.靈活性(flexibility)。它在應(yīng)用中體現(xiàn)了靈活多樣的操作,提高了使用效率。
5.簡化性(simplicity)。多態(tài)簡化對應(yīng)用軟件的代碼編寫和修改過程,尤其在處理大量對象的運算和操作時,這個特點尤為突出和重要。
instanceof
運算符功能:用來判斷某個實例變量是否屬于某種類的類型。一旦確定了 變量所引用的對象的類型后,可以將對象恢復(fù)給對應(yīng)的子類變量,以獲取對象的完整功能。?
例如:
?
public class Employee;
public class Manager extends Employee;
public class Contractor extends Employee ;
public void method(Employee e) {
if (e instanceof Manager) {
//如果雇員是經(jīng)理,可以做的事情寫在這里
}else if (e instanceof Contractor) {
//如果雇員是普通的職員,可以做的事情寫在這里
}else { //說明是臨時雇員,可以做的事情寫在這里
}
}
兩種類型轉(zhuǎn)換
1.向上類型轉(zhuǎn)換
將子類型轉(zhuǎn)換為父類型。
對于向上的類型轉(zhuǎn)換,不需要顯示指定,即不需要加上前面的小括號和父類類型名。
2.向下類型轉(zhuǎn)換
將父類型轉(zhuǎn)換為子類型。
對于向下的類型轉(zhuǎn)換,必須要顯式指定,即必須要使用強制類型轉(zhuǎn)換。
?
轉(zhuǎn)載于:https://www.cnblogs.com/Melony/p/4417220.html
總結(jié)
以上是生活随笔為你收集整理的Java三大特性[封装,继承,多态]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用js种的正则删除html标签
- 下一篇: Java多线程与网络编程综合使用