chapter5(My--Java教案)_第1頁
chapter5(My--Java教案)_第2頁
chapter5(My--Java教案)_第3頁
chapter5(My--Java教案)_第4頁
chapter5(My--Java教案)_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、5.1 超類與繼承類的關(guān)系 向上轉(zhuǎn)換(upcasting):把繼承類作為父類使用5.2 通過classpath訪問另一個目錄中的類 一個類能夠訪問另一個類: 1、這兩個類在同一個文件中 2、若不在同一個文件中,他們在同一個目錄里 若這兩個類不滿足上面的條件,還希望能夠訪問,就必須設(shè)置classpath,用來指出類所在的路徑。 譬如:Him1.java在d:javaplus目錄中 public class Him1 public int k = 100; 要訪問Him1.java的類Me1.java在d:scjpc4目錄中 public class Me1public static void m

2、ain(String args)Him1 him=new Him1();System.out.println("Him.i= "+him.i);為了是Me1能夠找到Him1,我們設(shè)置classpath= d:scjpc4 ;d:javaplus5.3 通過軟件包訪問另一個目錄中的類1、建立軟件包 package 軟件包名稱; 例如把Him2.class放到mypack . lib1軟件包里: package mypack.lib1;public class Him2public int i=100;當(dāng)編譯完Him2.java后,把Him2.class放到目錄mypackli

3、b1中,此時的classpath 恰好設(shè)置在mypack目錄的父目錄上。實際目錄是d:javaplusmypacklib1,classpath=d:javaplus2、使用軟件包 import 軟件包; 例如類Me2.java要訪問Him2類: import mypack.lib1.Him2; public class Me2 . 注意:Me2.class在d:scjpc4 下,而Him2.class在d:javaplusmypacklib1下,因為要運行Me2類,而且Me2類在運行時要能夠找到Him2類,所以設(shè)置classpath 為: classpath= d:scjpc4 ; d:jav

4、aplus3、在程序中正確使用package 和import語句的順序 package *.* import *.* class * 程序中只可能有一個package語句,但可以有多條import語句。 舉例: path已經(jīng)被設(shè)置為:path=C:jdkbin 1)文件Him2.java package mypack . lib1;public class Him2 public int i=100;2)文件test.java package mypack . lib2;import mypack . lib1 .*;public class test public static void m

5、ain(String args) Him2 h = new Him2(); System.out.print(h.i); 3)設(shè)置classpath = d:project編譯Him2.java將Him2.class移動到d:projectmypacklib1編譯test.java將test.class移動到d:projectmypacklib2 4)運行test無論當(dāng)前目錄在哪里,想要運行test.class,如下所示: java mypack.lib2.test5.4 存取(訪問)控制1、存取控制符:用來限定類可被外界訪問的程度。1) public :可以修飾類、數(shù)據(jù)和方法,表示所修飾的事

6、物是公共財產(chǎn),可以被任何程序訪問。一個類前面沒有public和其他修飾符,他也可以被其他類訪問,但是要滿足:Ø 兩個類在同一個文件中Ø 兩個類在同一個文件夾中Ø 兩個類在同一個軟件包中2) private :他修飾的數(shù)據(jù)只能在數(shù)據(jù)所在的類中才能使用,他修飾的方法只能在方法所在的類中使用,即使同一個文件的其他類也不能訪問。3) protected :針對繼承,表示他所修飾的數(shù)據(jù)或者方法對繼承類公開,即繼承類可以訪問超類中的protected數(shù)據(jù)和方法,但外界不能訪問。他不能修飾類。例子:在軟件包mypack . lib1中的一個類Parent:package myp

7、ack.lib1;public class Parent protected int i=100;下面這個程序要訪問Parent,但是和Parent不在同一個文件夾中:import mypack.lib1.Parent;public class Children extends Parent public static void main(String args) Children son=new Children(); Parent father=new Parent(); System.out.println("son.i= "+son.i); /success Sys

8、tem.out.println("father.i= "+father.i); / error 2、總結(jié) public(類、類中的數(shù)據(jù)和方法):任何類可訪問 protected(類中的數(shù)據(jù)和方法):繼承類和同一軟件包的類可訪問 private(類中的數(shù)據(jù)和方法):只能在其修飾的數(shù)據(jù)和方法所在的類內(nèi)可訪問 無存取控制符(類、類中的數(shù)據(jù)和方法):同一軟件包的類可訪問5.5 抽象類和抽象方法1、abstract使用關(guān)鍵字abstract修飾一個類,這個類就是抽象類;修飾一個方法,這個方法就是抽象方法。 astract class AbstractClassExample int

9、k;abstract void Func(); 注意: 1)若一個類是抽象類,就不能創(chuàng)建這個類的對象,必須使用繼承的方法來訪問抽象類中的成員;2)抽象方法沒有方法的定義體;3)若一個類中有一個抽象方法,那麼這個類就是抽象類;4)直接繼承抽象類的類必須實現(xiàn)抽象類中的抽象方法。2、具體例子 abstract class AbstractClassExample int i;abstract void abstractFunc();void notAbstractFunc1()void notAbstractFunc2()i = 0;class Class1 extends AbstractClas

10、sExamplevoid abstractFunc()i = 1;class Class2 extends AbstractClassExamplevoid abstractFunc()class Class3 extends Class1void abstractFunc()i = 3;class Class4 extends Class33、盡管不能創(chuàng)建抽象類的對象,但是抽象類可以有一個main方法,即抽象類可以運行 public abstract class AbstractClass1 int j;public abstract void func1( );public static

11、void main(String args) System.out.println(" i am abstract class");5.6 接口interface與多重繼承1、接口基礎(chǔ) interface InterfaceExample int j = 4;int k = 5;void func1( );int func2( int x );接口中的所有數(shù)據(jù)成員都是static 和final,即靜態(tài)常量,可以不用這兩個關(guān)鍵字修飾,但并且必須給常量賦初值;接口中的方法都是抽象方法,并且全部為public。2、類可以使用接口 注意:1)c.func2 (k) 由于k是接口中的

12、數(shù)據(jù)成員,因此是靜態(tài)常量,可以直接使用。 2)接口中的方法都是public,因此,必須在實現(xiàn)方法時加上關(guān)鍵字public。3、抽象類可以執(zhí)行接口,可以實現(xiàn)或者不實現(xiàn)接口中的方法 4、多重繼承 Java不允許一個類繼承多個類,即最多只能繼承一個類。但是可以通過執(zhí)行多個接口來達(dá)到多重繼承的效果: interface InterfaceExample1int i=4;void func1(); interface InterfaceExample2int k=5;void func2();class Class3 public void func2()System.out.println("

13、;func2 in class3");public class InterfaceClass2 extends Class3 implements InterfaceExample1,InterfaceExample2 int j;public void func1()System.out.println("func1 in InterfaceClass2");/*public void func2() System.out.println("func2 in InterfaceClass2"); */public static void ma

14、in(String args) InterfaceClass2 c=new InterfaceClass2(); c.func1(); c.func2();接口之間使用extends關(guān)鍵字表示繼承,并且被繼承的接口以逗號分隔:5、接口的類型轉(zhuǎn)換(Upcasting) interface A void f ( A a );class C implements A public void f ( A a )System.out.println(" f( )");public static void main(String args)C c=new C ( );c.f (c);方

15、法f的參數(shù)類型為A,但是可以用C來調(diào)用,即執(zhí)行接口的類也是接口的一種類型,和繼承超類的子類原理想同。5.7 內(nèi)部類基礎(chǔ)1、內(nèi)部類:定義在一個類內(nèi)部的類。2、例子: 內(nèi)部類可以直接訪問外部類的成員,不需要創(chuàng)建外部類的對象;而外部類則不能 外部類要想訪問內(nèi)部類: 1)創(chuàng)建外部類的對象如outerOuter outer = new Outer( ); 2)創(chuàng)建內(nèi)部類的對象如innerOuter . Inner inner = outer . new Inner( ); 3)訪問內(nèi)部類成員inner . m1( 2 );5.8 Java的存儲結(jié)構(gòu)Java把存儲器分為:1、 寄存器2、棧3、堆4、靜態(tài)存

16、儲區(qū)5、常量存儲區(qū)5.9 編寫類實現(xiàn)循環(huán)鏈表 1、節(jié)點類Noteclass Note public String data;public int x;public int y;public Note next;public Note( String d , int offset_x , int offset_y ) data = d; x = offset_x;y = offset_y; 2、循環(huán)鏈表類Queryclass Query final int wh = 10;private Note head ;private Note p ;int num;public Query() head

17、 = new Note( "head" , wh , wh ); head.next = head;num = 1; public Query( int size ) head = new Note( "head" , ( size + 2 ) * wh , wh + 20 ); head.next = head;num = 1; int i,j;Note add;add = new Note size ; for ( j = 1 ; j < size ; j + ) add j = new Note( String.valueOf( j ) ,

18、( size + 2 ) * wh - j * wh , wh + 20 ) ;/addElement( add j );p = head; for ( i = 1 ; i < num ; i + ) p = p.next; add j .next = head; p.next = add j ; num +; public void addElement( Note add ) p = head;for ( int i = 1 ; i < num ; i + ) p = p.next;add.next = head;p.next = add;head = add;num +; public void move( int x , int y ) p = head;for ( int i = 0 ; i < num - 1 ; i + ) p = p.next;p.x = head.x + x;p.y = head.y + y;head = p; public int getX(

溫馨提示

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

評論

0/150

提交評論