Java的重寫
1.函數(shù)的復(fù)寫(override).
2.使用super調(diào)用父類的成員函數(shù).
復(fù)寫與重載是不同的.
復(fù)寫在兩個(gè)類中,在父類與子類中.
重載在一個(gè)類中.
class Person20{ String name; int age; void introduce(){ System.out.println("我的名字"+ name+"年齡"+age); } }
//復(fù)寫(override)也稱之為覆蓋或者重寫
//1.在具有父子關(guān)系的兩個(gè)類當(dāng)中.
//2.父類和子類各有一個(gè)函數(shù),這兩個(gè)函數(shù)的定義(返回值 ,函數(shù)名和參數(shù)列表)完全相同
class Student20 extends Person20{ String address; void introduce(){ //anotherFun(); super.introduce();//調(diào)用父類的成員函數(shù),減少重復(fù)代碼, //System.out.println("我的姓名是"+name+"我的年齡是"+age); System.out.println("我的家在"+address); } }
class Test20{ public static void main(String args[]){ Student20 s = new Student20(); s.name = "張三"; s.age = 20; s.address = "深圳"; s.introduce(); Person20 p = new Person20(); //p.name = "李四"; //p.age = 30; //p.introduce(); //p.address = "廣州"; } }
Java的函數(shù)轉(zhuǎn)型
這是一個(gè)非常非常的語法.就像吃飯喝水一樣平常,面向?qū)ο蠖鄳B(tài)性的一個(gè)體現(xiàn).
1.對(duì)象的向上轉(zhuǎn)型.
2.對(duì)象的向下轉(zhuǎn)型.
對(duì)象的向上轉(zhuǎn)型.
向上轉(zhuǎn)型: 將子類的對(duì)象賦值給父類的引用.
Student s = new Student();
Person p = s; //向上轉(zhuǎn)換.子類的對(duì)象賦值給父類的引用.
向上轉(zhuǎn)型是一定可以成功.
對(duì)象的向下轉(zhuǎn)型:
向下轉(zhuǎn)型--將父類的對(duì)象賦值給子類的引用.
Student s1 = new Student();
Person p = s1;
Student s2 = (Student)p;
class Person20{ String name; int age; void introduce(){ System.out.println("我的名字"+ name+"年齡"+age); } }
class Student20 extends Person20{ String address; void study(){ System.out.println("學(xué)習(xí)"); } void introduce(){ //anotherFun(); super.introduce();//調(diào)用父類的成員函數(shù),減少重復(fù)代碼, //System.out.println("我的姓名是"+name+"我的年齡是"+age); System.out.println("我的家在"+address); } }
//一個(gè)引用能夠調(diào)用那些成員(變量和函數(shù)),取決于這個(gè)引用的類型 //一個(gè)引用調(diào)用的是那一個(gè)方法,取決于這個(gè)引用指向的對(duì)象. class Test20{ public static void main(String args[]){ //正確的向下轉(zhuǎn)型 Person20 p = new Student20(); Student20 s = (Student20)p; //錯(cuò)誤的向下轉(zhuǎn)型 //Person p = new Person(); //Student s = (student)p; //向上轉(zhuǎn)型 //Student20 s = new Student20(); //Person20 p = s; //p.name = "張三"; //p.age = 20; //p.address = "北京"; //此語句不能執(zhí)行 //一個(gè)引用能夠調(diào)用那些成員(變量和函數(shù)),取決于這個(gè)引用的類型 //p.introduce();//調(diào)用子類的的introduce() //一個(gè)引用調(diào)用的是那一個(gè)方法,取決于這個(gè)引用指向的對(duì)象. } }
無論是上轉(zhuǎn)還是下轉(zhuǎn)都是為了讓類的使用范圍和適用范圍發(fā)生變化,以便操作不同范圍的變量或者方法。
1上轉(zhuǎn)型是指將子類對(duì)象使用父類引用進(jìn)行引用。
得:上轉(zhuǎn)型對(duì)象可以操作和使用子類繼承或者重寫的方法。
失:上轉(zhuǎn)型對(duì)象喪失了對(duì)子類新增成員變量或新增的方法的操作和使用。
2與向上轉(zhuǎn)型相反,即是把父類對(duì)象轉(zhuǎn)為子類對(duì)象:作用也與上轉(zhuǎn)相反。
java 轉(zhuǎn)型問題其實(shí)并不復(fù)雜,只要記住一句話:父類引用指向子類對(duì)象。子類和父類中定義同名的變量時(shí),僅僅是隱藏了,變量沒有多態(tài)性;而對(duì)于覆蓋的方法,Java表現(xiàn)出多態(tài)性,會(huì)調(diào)用更具體的子類里面的方法,無論從哪里調(diào)用,無論使用什么引用類型調(diào)用。