Java語言程序設計:JAVA_5-子類與繼承_第1頁
Java語言程序設計:JAVA_5-子類與繼承_第2頁
Java語言程序設計:JAVA_5-子類與繼承_第3頁
Java語言程序設計:JAVA_5-子類與繼承_第4頁
Java語言程序設計:JAVA_5-子類與繼承_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、第第5章章 子類與繼承子類與繼承子類與繼承子類與繼承第第5章章 子類與繼承子類與繼承子類與父類子類與父類n 繼承:用一種已有的類創(chuàng)建新類的機制。n 子類與父類:由繼承得到的類稱為子類,被繼承的類稱為父類class 子類名 extends 父類名第第5章章 子類與繼承子類與繼承子類與父類子類與父類1 子類除了可以“擁有”父類中的部分部分成員外,還可以定義自己特有的成員特有的成員。2 如果一個類沒有使用“extends”關鍵字繼承其他類,則默認是“ObjectObject”類的子類class 子類名 extends 父類名第第5章章 子類與繼承子類與繼承1. 子類繼承父類的屬性、功能(方法),子類

2、中只需只需聲明特有的東西聲明特有的東西。2. 帶privateprivate修飾符的屬性、方法是不能被繼承的。3.3. 構(gòu)造函數(shù)構(gòu)造函數(shù)不能被繼承。4. 在方法中調(diào)用構(gòu)造方法用this()this()。5. 調(diào)用父類的構(gòu)造方法用super()super()。 super指向該關鍵字所在類的父類。6. Java是單繼承單繼承的,即只能從一個類繼承。 單繼承的優(yōu)點是代碼更可靠。子子 類類第第5章章 子類與繼承子類與繼承子類的繼承性子類的繼承性class Father private int money; int weight; int getWeight() return weight; prot

3、ected void setWeight(int w) weight=w; class Son extends Father String hand; public void setHand(String hand) this.hand=hand; String getHand() return hand; 第第5章章 子類與繼承子類與繼承class Grandson extends Son String foot; public void setFoot(String foot) this.foot=foot; String getFoot() return foot; 子類的繼承性子類的繼

4、承性第第5章章 子類與繼承子類與繼承public class Example3_1 public static void main(String args) Son son=new Son(); Grandson grandson=new Grandson(); son.setWeight(67); son.setHand(一雙大手); grandson.setWeight(25); grandson.setHand(一雙小手); grandson.setFoot(一雙小腳); System.out.println(兒子重量+son.getWeight(); System.out.printl

5、n(孫子重量+grandson.getWeight(); System.out.println(兒子的手+son.getHand(); System.out.println(孫子的手+grandson.getHand(); System.out.println(孫子的腳+grandson.getFoot(); 1、如果子類和父類在同一個包中,子類繼承了父類中不不是是privateprivate的成員的成員,并且繼承成員的訪訪問權(quán)限不變問權(quán)限不變。2、如果子類和父類不在同一個包不在同一個包中,子類只能繼承父類中protected和和public類型的成員類型的成員,并且繼承成員的訪問權(quán)訪問權(quán)限不

6、變限不變。兒子重量:67孫子重量:25兒子的手:一雙大手孫子的手:一雙小手孫子的腳:一雙小腳第第5章章 子類與繼承子類與繼承子類對象的構(gòu)造過程子類對象的構(gòu)造過程class A private int x; void setX(int x) this.x=x; int getX() return x; class B extends A double y=12; public void setY(int y) /this.y=y+x; public double getY() rerurn y; 第第5章章 子類與繼承子類與繼承子類對象的構(gòu)造過程子類對象的構(gòu)造過程public class E p

7、ublic static void main(String arg) B b=new B(); b.setX(888); System.out.println(子類對象未繼承的x的值是:+b.getX(); b.y=12.678; System.out.println(子類對象的實例變量y的值是:+b.getY();) 子類對象未繼承的子類對象未繼承的x x的值是的值是:888:888子類對象的實例變量子類對象的實例變量y y的值的值是是:12.678:12.678第第5章章 子類與繼承子類與繼承子類對象的構(gòu)造過程子類對象的構(gòu)造過程1、當用子類的構(gòu)造方法創(chuàng)建一個子類對象時,子類的構(gòu)造方法總是先

8、調(diào)用父類的某個構(gòu)造方法。2、如果子類的構(gòu)造方法中沒有明顯地指明使用父類的哪個構(gòu)造方法,子類就調(diào)用父類的不帶參數(shù)的構(gòu)造方法。3、當用子類創(chuàng)建對象時,不僅子類中聲明的成員變量被分配內(nèi)存,而且父類的成員變量也全都分配了內(nèi)存。(被子類繼承的方法中可能有對未被子類繼承成員變量的操作)第第5章章 子類與繼承子類與繼承class MealMeal()System.out.print(Meal();class BreadBread()System.out.print(Bread();class CheeseCheese()System.out.print(Cheese();class LettuceLettu

9、ce()System.out.print(Lettuce();class Lunch extends MealLunch()System.out.print(Lunch();class PortableLunch extends LunchPortableLunch()System.out.print(PortableLunch();public class Sandwich extends PortableLunchprivate Bread b=new Bread();private Cheese c=new Cheese();private Lettuce l=new Lettuce()

10、;public Sandwich()System.out.println(Sandwich();public static void main(String args)new Sandwich();Meal()Lunch()PortableLunch()Bread()Cheese()Lettuce()Sandwich()第第5章章 子類與繼承子類與繼承成員變量的隱藏和方法的重寫成員變量的隱藏和方法的重寫1 如果子類中定義了和父類同名的成員變量,子類就隱藏了繼承的成員變量。2如果子類中定義了和父類相同方法(方法的名字、返回類型、參數(shù)個數(shù)和類型),子類就隱藏了繼承的成員方法。如果子類想使用被隱藏的

11、方法,必須使用super關鍵字。第第5章章 子類與繼承子類與繼承class A public double n=3.98; public double getHiddenN() return n; class B extends A public int n; public int getN() return n; public class Example5_3 public static void main(String args) B b=new B(); /b.n=198.98; b.n = 18; System.out.println(對象b的n的值是:+b.getN(); Syste

12、m.out.println(對象b隱藏的n的值是:+b.getHiddenN(); 第第5章章 子類與繼承子類與繼承 子類通過重寫可以隱藏已繼承的實例方法。子類通過重寫可以隱藏已繼承的實例方法。1 1重寫的語法規(guī)則重寫的語法規(guī)則 子類中定義一個方法,這個方法的類型和父類的方法的類型一致或者是父類的方法的類型的子類型,并且這個方法的名字、參數(shù)個數(shù)、參數(shù)的類型和父類的方法完全相同。 2 2重寫的目的重寫的目的 子類通過方法的重寫可以隱藏繼承的方法,子類通過方法的重寫可以把父類的狀態(tài)和行為改變?yōu)樽陨淼臓顟B(tài)和行為。3重寫的規(guī)則重寫的規(guī)則方法重寫方法重寫返回值類型返回值類型必須與原來方法的返回值完全相同

13、。方法的訪問權(quán)限不能縮小訪問權(quán)限不能縮小。不能拋出新的例外。第第5章章 子類與繼承子類與繼承方法重寫方法重寫class A float f(int x,int y) return x+y; public void g() System.out.println(I am a student); class B extends A float f(int x,int y) return x*y; public class E public static void main(String args) B b=new B(); float result=b.f(3,5); System.out.pri

14、ntln(result); b.g(); 15.0I am a student第第5章章 子類與繼承子類與繼承super關鍵字關鍵字1、使用super關鍵字可以使用父類的構(gòu)造函數(shù)使用父類的構(gòu)造函數(shù)。class Student int number;String name; Student() Student(int number ,String name) this.number=number; =name; System.out.println(I am +name+my number is +number); 第第5章章 子類與繼承子類與繼承class UniverStu

15、dent extends Student boolean 婚否; UniverStudent(int number,String name,boolean b) super(number,name); 婚否=b; System.out.println(婚否=+婚否); public class Example3-10 public static void main(String args) UniverStudent zhang=new UniverStudent(9901,和曉林,false); 1 子類不繼承父類的構(gòu)造函數(shù);父類的構(gòu)造函數(shù)也只能在子類只能在子類的構(gòu)造函數(shù)中出現(xiàn)的構(gòu)造函數(shù)中出

16、現(xiàn);2 父類的構(gòu)造函數(shù)顯式或隱式(自動調(diào)用super()super())作為子類構(gòu)造函數(shù)的第一條第一條語句;I am 和曉林和曉林my number is 9901婚否婚否=false第第5章章 子類與繼承子類與繼承2、使用super關鍵字可以使用被子類隱藏的成員變量或方法被子類隱藏的成員變量或方法。class Sum int n; double f() double sum=0; for(int i=1;i=n;i+) sum=sum+i; return sum; class Average extends Sum double n; double f() double c; super.n

17、=(int)n; c=super.f(); return c+n; double g() double c; c=super.f(); return c-n; 第第5章章 子類與繼承子類與繼承public class Example3-11 public static void main(String args) Average aver=new Average(); aver.n=100.5678; double result1=aver.f(); double result2=aver.g(); System.out.println(result1=+result1); System.ou

18、t.println(result2=+result2); result1=5150.5678result2=4949.4322將左側(cè)代碼更改為:double result2=aver.g();double result1=aver.f();運行結(jié)果如下: result1=5150.5678result2=-100.5678第第5章章 子類與繼承子類與繼承final關鍵字關鍵字1 1、用、用finalfinal關鍵字修飾的類為關鍵字修飾的類為finalfinal類。類。finalfinal類類不能被繼承不能被繼承。2 2、用、用finalfinal關鍵字修飾的方法為關鍵字修飾的方法為finalf

19、inal方法。方法。finalfinal方法方法不允許子類重寫。不允許子類重寫。3 3、用、用finalfinal關鍵字修飾的變量為關鍵字修飾的變量為常量常量。第第5章章 子類與繼承子類與繼承final關鍵字舉例關鍵字舉例class A /final double PI; final double PI=3.1415926; public double getArea(final double r) /r=89; return PI*r*r; public final void speak() System.out.println(您好); 第第5章章 子類與繼承子類與繼承final關鍵字舉例

20、關鍵字舉例class B extends A /* public void speak() System.out.println(你好); */public class E public static void main(String args) B b=new B(); System.out.println(面積:+b.getArea(100); b.speak(); 面積:31415.92600000您好第第5章章 子類與繼承子類與繼承當用子類創(chuàng)建一個對象,并將這個對象(的引用)賦值給一個父類對象的引用時,稱這個父類對象的引用是子類對象的上轉(zhuǎn)型對象。 假設People類是American類

21、的父類,當用子類創(chuàng)建一個對象并把這個對象的引用放到父類的對象中時,比如:People person;person = new American ();或或稱對象稱對象personperson是對象是對象anAmericananAmerican的的上轉(zhuǎn)型對象上轉(zhuǎn)型對象 People person;American anAmerican = new American ();person = anAmerican;對象的上轉(zhuǎn)型對象對象的上轉(zhuǎn)型對象第第5章章 子類與繼承子類與繼承對象的上轉(zhuǎn)型對象對象的上轉(zhuǎn)型對象class 類人猿 double m=12.58; void crySpeak(String

22、 s) System.out.println(s); class People extends 類人猿char m=A; int n=60; void computer(int a,int b) int c=a+b; System.out.println(a+加+b+等于+c); void crySpeak(String s) System.out.println(m+*+s+*+m); 第第5章章 子類與繼承子類與繼承class E public static void main (String args) People wang=new People(); 類人猿 monkey=wang;

23、 /monkey是wang的上轉(zhuǎn)型對象 monkey.crySpeak(I love this game); /monkey.n=100; /puter(12,19); System.out.println(monkey.m); People zhang=(People)monkey; puter(55,33); zhang .m=T; System.out.println(zhang.m); A A* * *I love this gameI love this game* * *A A12.5812.585555加加3333等于等于8888T T第第5章章 子類與繼承子類與繼承多多 態(tài)態(tài)如

24、果一個類有很多子類,并且這些子類都重寫了父類的某個方法,那么當子類子類對象的上轉(zhuǎn)型對象在調(diào)用這個方法時就可能具有多種形態(tài),稱為多態(tài)多態(tài)。class 動物 void cry() class 狗 extends 動物 void cry() System.out.println(這是狗的叫聲:汪汪.汪汪); 第第5章章 子類與繼承子類與繼承多多 態(tài)態(tài)class 貓 extends 動物 void cry() System.out.println(這是貓的叫聲:喵喵.喵喵); class E public static void main (String args) 動物 dongwu=new狗();

25、 dongwu.cry(); dongwu=new貓(); dongwu.cry(); 第第5章章 子類與繼承子類與繼承abstract類和類和abstract方法方法1 1、用關鍵字、用關鍵字abstractabstract修飾的類稱為修飾的類稱為abstractabstract類。用關類。用關鍵字鍵字abstractabstract修飾的成員方法稱為修飾的成員方法稱為abstractabstract方法。方法。2 2、抽象類、抽象類不能使用不能使用newnew關鍵字創(chuàng)建對象關鍵字創(chuàng)建對象。3 3、抽象方法、抽象方法只有聲明,沒有方法體只有聲明,沒有方法體。只能存在。只能存在抽象類抽象類和和

26、接口接口中。中。4 4、不允許使用、不允許使用finalfinal和和abstractabstract同時修飾一個方法。同時修飾一個方法。5 5、如果某個、如果某個非抽象類非抽象類繼承了抽象類,則繼承了抽象類,則必須重寫父類必須重寫父類的所有抽象方法的所有抽象方法(去掉(去掉abstractabstract關鍵字),關鍵字),并給出方并給出方法體法體。6 6、在程序設計時,抽象類用于定義類的、在程序設計時,抽象類用于定義類的重要特征重要特征,非,非抽象類則關注動作的抽象類則關注動作的具體實現(xiàn)具體實現(xiàn)。第第5章章 子類與繼承子類與繼承abstract類和類和abstract方法方法abstrac

27、t class 機動車 abstract void 啟動(); abstract void 加速(); abstract void 剎車();class 手動擋轎車 extends 機動車 void 啟動() System.out.println(踏下離合器,換到一擋); System.out.println(然后慢慢抬起離合器); void 加速() System.out.println(踩油門); void 剎車() System.out.println(踏下離合器,踏下剎車板); System.out.println(然后將擋位換到一擋); 第第5章章 子類與繼承子類與繼承abstrac

28、t類和類和abstract方法方法class 自動擋轎車 extends 機動車 void 啟動() System.out.println(使用前進擋); System.out.println(然后輕踩油門); void 加速() System.out.println(踩油門); void 剎車() System.out.println(踏下剎車板); public class E public static void main(String args) 手動擋轎車 car1=new 手動擋轎車(); 自動擋轎車 car2=new 自動擋轎車(); car1.啟動(); car1.加速();

29、car1.剎車(); car2.啟動(); car2.加速(); car2.剎車(); 第第5章章 子類與繼承子類與繼承abstract類和類和abstract方法方法abstract class A abstract int sum(int x,int y); int sub(int x,int y) return x-y; class B extends A int sum(int x,int y) return x+y; public class E public static void main(String args) B b=new B(); int sum=b.sum(30,20

30、); int sub=b.sub(30,20); System.out.println(sum=+sum); System.out.println(sub=+sub); sum=50sub=10第第5章章 子類與繼承子類與繼承面向抽象編程面向抽象編程好處:可以體現(xiàn)程序設計的“開閉”原則,即對擴展開放,對修改關閉,增強代碼的可維護性。Geometry.java/圖形public abstract class Geometry public abstract double getArea();Lader.javapublic class Lader extends Geometry double a,b,h; Lader(double a,double b,double h) this.a=a;this.b=b;this.h=h; public double getArea() return(1/2.0)*(a+b)*h); 第第5章章 子類與繼承子類與繼承Circle.javapublic class Circle extends Geometry dou

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論