一、封裝
功能:其實就是實現代碼的複用,屏蔽一些細節
比如下面這個例子: 我在類Person裡面封裝了一個方法public void pname(){}這樣的話在main方法裡面就不用重複使用System.out.println();這句話了,避免了代碼的重複使用,成程式看起來比較簡潔
public class test{ public static void main(String agrs[]){ Person p1 = new Person(); p1.name = "jack1"; Person p2 = new Person(); p2.name = "jack2"; Person p3 = new Person(); p3.name = "jack3"; Person p4 = new Person(); p4.name = "jack4"; p1.pname(p1); p2.pname(p2); p3.pname(p3); p4.pname(p4); }}class Person{ String name; public void pname(Person person){ System.out.println(person.name); }}
二、繼承
概念:就是指對象與對象之間的一種關係
作用:代碼的複用、功能的擴充
在JAVA中使用extends關鍵字來表示兩個類的繼承,當子類繼承了一個父類(基類、超類)的時候,子類自動擁有父類的所有成員。
1、方法的重寫(voerread)
是發生在繼承關係中的,在父類中被重寫的方法和子類中重寫的方法必須有相同的方法名、相同的傳回值類型、相同的參數列表,子類中重寫的方法不能擁有比父類中更加嚴格的存取修飾詞
例如下面這個簡單的例子:
public class test{ public static void main(String[] args){ Animel animel = new Animel(); animel.name = "mouse"; animel.age = "12"; animel.named(); Cat cat = new Cat(); cat.name = "cat"; cat.age = "13"; cat.sex = "boy"; cat.named(); } } class Animal{ String name; String age; public void named(){ System.out.println("name is:" + name + "it is age is :" + age); } } class Cat extends Animal{ String sex; public void named(){ System.out.println("name is:" + name + "it is age is :" + age + "sex is " + sex); } }
2、方法的重載(overload)
發生在同一個類當中,必須擁有相同的方法名,可以擁有不同的傳回值類型,但是必須擁有不通的參數列表
比如下面這個簡單的例子加以理解:
public class test{ public static void main(String args[]){ Numbsum bsum = new Numbsum(); bsum.sum(20); bsum.sum(20,30); bsum.sum(20,30,40); } } class Numbsum{ public void sum(int a){ System.out.println(a); } public void sum(int a,int b){ System.out.println(a+b); } public void sum(int a,int b,int c){ System.out.println(a+b+c); } }
3、Super關鍵字
相當於當前父類對象的引用,每一個子類的對象中都有父類的對象,因為子類自動擁有父類的所有成員;JAVA在構建子類的對象的過程中,要先構建父類的對象,然後再建立子類的對象。
下面這個架構圖把這個抽象的概念形象化的表示出來了:
圖 1
注意:1)、當子類的成員變數和父類的成員變數重名時,需要訪問父類的成員變數的時候使用 super.成員變數名 來調用
2)、重寫的過程中,子類重寫的方法需要調用父類被重寫的方法的時候使用 super.方法名
3)、如果父類中沒有無參數的構造方法時,是不能成功建立子類的對象的,需要在子類構造方法中手動添加父類的構造方法 super.()
如下簡單程式碼說明其原理:
public class test{ public static void main(String[] args){ Student person = new Student(); }}class Person{ public Person(int num){ }}class Student extends Person{ public Student(){ super(100); System.out.println("子類對象成功建立"); }}
注意:繼承中子類建立對象的一些細節過程
1)、先建立父類對象再建立子類對象
2)、JAVA是用構造方法來建立對象的
3)、JAVA要先調用父類的構造方法,再調用子類的構造方法
4)、JAVA預設調用父類中無參的構造方法
5)、給父類中添加了一個有參數的顯示的構造方法,那麼隱式的無參數的構造方法就不存在了
三、多態
根據程式執行的時候根據傳入的參數決定綁定哪一個方法
條件:1、要有繼承 2、方法的重寫 3、父類的引用指向子類的對象