亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

java復習

系統 2051 0
2. 繼承性

  通過繼承實現代碼復用。Java中所有的類都是通過直接或間接地繼承java.lang.Object類得到的。繼承而得到的類稱為子類,被繼承的類稱為父類。子類不能繼承父類中訪問權限為private的成員變量和方法。子類可以重寫父類的方法,及命名與父類同名的成員變量。但Java不支持多重繼承,即一個類從多個超類派生的能力。

  ◇ 創建子類
  格式:
  class SubClass extends SuperClass {
  …
  }

  ◇ 成員變量的隱藏和方法的重寫
  子類通過隱藏父類的成員變量和重寫父類的方法,可以把父類的狀態和行為改變為自身的狀態和行為。

  例如:
  class SuperClass{
    int x; …
    void setX( ){ x=0; } …
  }
  class SubClass extends SuperClass{
    int x;   //隱藏了父類的變量x
    …
    void setX( ) { //重寫了父類的方法 setX()
    x=5; } ….
  }

  注意:子類中重寫的方法和父類中被重寫的方法要具有相同的名字,相同的參數表和相同的返回類型,只是函數體不同。

  ◇ super
  java中通過super來實現對父類成員的訪問,super用來引用當前對象的父類。Super 的使用有三種情況:

  1)訪問父類被隱藏的成員變量,如:
    super.variable;

  2)調用父類中被重寫的方法,如:
    super.Method([paramlist]);

  3)調用父類的構造函數,如:
    super([paramlist]);

【例3-5】
  import java.io.*;
  class SuperClass{
    int x;
    SuperClass( ) {
     x=3;
     System.out.println("in SuperClass : x=" +x);
    }
     void doSomething( ) {
     System.out.println("in SuperClass.doSomething()");
    }
  }
  class SubClass extends SuperClass {
    int x;
    SubClass( ) {
     super( );    //調用父類的構造方法
     x=5;      //super( ) 要放在方法中的第一句
     System.out.println("in SubClass ="+x);
    }
     void doSomething( ) {
     super.doSomething( ); //調用父類的方法
     System.out.println("in SubClass.doSomething()");
     System.out.println("super.x="+super.x+" sub.x="+x);
    }
  }
  public class Inheritance {
     public static void main(String args[]) {
     SubClass subC=new SubClass();
     subC.doSomething();
    }
  }

    運行結果
c:\> java Inheritance
in SuperClass: x=3
in SubClass: x=5
in SuperClass.doSomething()
in SubClass.doSomething()
super.x=3 sub.x=5






c:\> java Dispatch
Inside B's callme() method


3. 多態性

  在java語言中,多態性體現在兩個方面:由方法重載實現的靜態多態性(編譯時多態)和方法重寫實現的動態多態性(運行時多態)。

  1) 編譯時多態
  在編譯階段,具體調用哪個被重載的方法,編譯器會根據參數的不同來靜態確定調用相應的方法。

  2) 運行時多態
  由于子類繼承了父類所有的屬性(私有的除外),所以子類對象可以作為父類對象使用。程序中凡是使用父類對象的地方,都可以用子類對象來代替。一個對象可以通過引用子類的實例來調用子類的方法。

  ◇ 重寫方法的調用原則:java運行時系統根據調用該方法的實例,來決定調用哪個方法。對子類的一個實例,如果子類重寫了父類的方法,則運行時系統調用子類的方法;如果子類繼承了父類的方法(未重寫),則運行時系統調用父類的方法。

  在例3-6中,父類對象a引用的是子類的實例,所以,java運行時調用子類B的callme方法。

【例3-6】
  import java.io.*;
  class A{
     void callme( ) {
      System.out.println("Inside A's callme()method");
     }
  }
  class B extends A{
     void callme( ) {
      System.out.println("Inside B's callme() Method");
     }
  }
  public class Dispatch{
     public static void main(String args[]) {
      A a=new B();
      a.callme( );
     }
  }

    運行結果

  ◇ 方法重寫時應遵循的原則:
  1)改寫后的方法不能比被重寫的方法有更嚴格的訪問權限(可以相同)。
  2)改寫后的方法不能比重寫的方法產生更多的例外

4. 其它

  ◇ final 關鍵字
  final 關鍵字可以修飾類、類的成員變量和成員方法,但final 的作用不同。

  1) final 修飾成員變量:
  final修飾變量,則成為常量,例如
  final type variableName;
  修飾成員變量時,定義時同時給出初始值,而修飾局部變量時不做要求。

  2) final 修飾成員方法:
  final修飾方法,則該方法不能被子類重寫
  final returnType methodName(paramList){
  …
  }

  3) final 類:
  final修飾類,則類不能被繼承
  final class finalClassName{
  …
  }

  ◇ 實例成員和類成員
  用static 關鍵字可以聲明類變量和類方法,其格式如下:
  static type classVar;
  static returnType classMethod({paramlist}) {
  …
  }

  如果在聲明時不用static 關鍵字修飾,則聲明為實例變量和實例方法。
  1) 實例變量和類變量
  每個對象的實例變量都分配內存,通過該對象來訪問這些實例變量,不同的實例變量是不同的。
  類變量僅在生成第一個對象時分配內存,所有實例對象共享同一個類變量,每個實例對象對類變量的改變都會影響到其它的實例對象。類變量可通過類名直接訪問,無需先生成一個實例對象,也可以通過實例對象訪問類變量。

  2) 實例方法和類方法
  實例方法可以對當前對象的實例變量進行操作,也可以對類變量進行操作,實例方法由實例對象調用。
  但類方法不能訪問實例變量,只能訪問類變量。類方法可以由類名直接調用,也可由實例對象進行調用。類方法中不能使用this或super關鍵字。

  例3-7 是關于實例成員和類成員的例子。

【例3-7】
  class Member {
    static int classVar;
    int instanceVar;
    static void setClassVar(int i) {
     classVar=i;
     // instanceVar=i; // 類方法不能訪問實例變量
    }
    static int getClassVar()
     { return classVar; }
    void setInstanceVar(int i)
     { classVar=i; //實例方法不但可以訪問類變量,也可以實例變量
     instanceVar=i; }
     int getInstanceVar( )
     { return instanceVar; }
    }
    public class MemberTest{
     public static void main(String args[]) {
         Member m1=new member();
         Member m2=new member();
         m1.setClassVar(1);
         m2.setClassVar(2);
         System.out.println("m1.classVar="+m1.getClassVar()+"
                   m2.ClassVar="+m2.getClassVar());
         m1.setInstanceVar(11);
         m2.setInstanceVar(22);
         System.out.println("m1.InstanceVar="+m1.getInstanceVar
              ()+" m2.InstanceVar="+m2.getInstanceVar());
     }
    }

    運行結果



  ◇ 類java.lang.Object
  類java.lang.Object處于java開發環境的類層次的根部,其它所有的類都是直接或間接地繼承了此類。該類定義了一些最基本的狀態和行為。下面,我們介紹一些常用的方法。

  equals() :比較兩個對象(引用)是否相同。
  getClass():返回對象運行時所對應的類的表示,從而可得到相應的信息。
  toString():用來返回對象的字符串表示。
  finalize():用于在垃圾收集前清除對象。
  notify(),notifyAll(),wait():用于多線程處理中的同步。

3.2.4抽象類和接口

 1. 抽象類

  java語言中,用abstract 關鍵字來修飾一個類時,這個類叫做抽象類,用abstract 關鍵字來修飾一個方法時,這個方法叫做抽象方法。格式如下:
  abstract class abstractClass{ …} //抽象類
  abstract returnType abstractMethod([paramlist]) //抽象方法

  抽象類必須被繼承,抽象方法必須被重寫。抽象方法只需聲明,無需實現;抽象類不能被實例化,抽象類不一定要包含抽象方法。若類中包含了抽象方法,則該類必須被定義為抽象類。

 2. 接口

  接口是抽象類的一種,只包含常量和方法的定義,而沒有變量和方法的實現,且其方法都是抽象方法。它的用處體現在下面幾個方面:
  ◇ 通過接口實現不相關類的相同行為,而無需考慮這些類之間的關系。
  ◇ 通過接口指明多個類需要實現的方法。
  ◇ 通過接口了解對象的交互界面,而無需了解對象所對應的類。

  1)接口的定義
  接口的定義包括接口聲明和接口體。
  接口聲明的格式如下:
  [public] interface interfaceName[extends listOfSuperInterface] { … }
   extends 子句與類聲明的extends子句基本相同,不同的是一個接口可有多個父接口,用逗號隔開,而一個類只能有一個父類。

  接口體包括常量定義和方法定義
  常量定義格式為:type NAME=value; 該常量被實現該接口的多個類共享; 具有public ,final, static的屬性。
  方法體定義格式為:(具有 public和abstract屬性)
  returnType methodName([paramlist]);

  2)接口的實現
  在類的聲明中用implements子句來表示一個類使用某個接口,在類體中可以使用接口中定義的常量,而且必須實現接口中定義的所有方法。一個類可以實現多個接口,在implements子句中用逗號分開。

  3) 接口類型的使用
  接口作為一種引用類型來使用。任何實現該接口的類的實例都可以存儲在該接口類型的變量中,通過這些變量可以訪問類所實現的接口中的方法。

3.2.5 內部類

 1. 內部類的定義和使用:

  內部類是在一個類的內部嵌套定義的類,它可以是其它類的成員,也可以在一個語句塊的內部定義,還可以在表達式內部匿名定義。
  內部類有如下特性:

  ◇ 一般用在定義它的類或語句塊之內,在外部引用它時必須給出完整的名稱.名字不能與包含它的類名相同。
  ◇ 可以使用包含它的類的靜態和實例成員變量,也可以使用它所在方法的局部變量。
  ◇ 可以定義為abstract。
  ◇ 可以聲明為private或protected。
  ◇ 若被聲明為static,就變成了頂層類,不能再使用局部變量。
  ◇ 若想在Inner Class中聲明任何static成員,則該Inner Class必須聲明為static。

  例3-8 是一個說明內部類如何使用的例子,其中,定義了兩個內部類:MouseMotionHandler和MouseEventHandler,分別用來處理鼠標移動事件和鼠標點按事件。

【例3-8】
  import java.awt.*;
  import java.awt.event.*;
  public class TwoListenInner {
    private Frame f;
    private TextField tf;
      public static void main(String args[]) {
       TwoListenInner that=new TwoListenInner();
       that.go();
    }

      public void go() {
       f=new Frame("Two listeners example");
       f.add("North",new Label("Click and drag the mouse"));
       tf=new TextField(30);
       f.add("South",tf);
       f.addMouseMotionListener(new MouseMotionHandler());
       f.addMouseListener(new MouseEventHandler());
       f.setSize(300,300);
       f.setVisible(true);
    }
    public class MouseMotionHandler extends MouseMotionAdapter {
      public void mouseDragged(MouseEvent e){
       String s="Mouse dragging:X="+e.getX()+"Y="+e.getY();
       tf.setText(s);
      }
    }
    public class MouseEventHandler extends MouseAdapter {
      public void mouseEntered(MouseEvent e){
       String s="The mouse entered";
       tf.setText(s);
      }
      public void mouseExited(MouseEvent e){
       String s="The mouse left the building";
       tf.setText(s);
      }
    }
  }

  同學們可以運行一下這個程序,看一看它的運行結果。當你將鼠標移入frame時,文本框中會出現:"The mouse entered";當你在frame中拖曳鼠標時,文本框中會出現:"Mouse dragging:X=64 Y=117";當鼠標離開文本框時,文本框中出現:"The mouse left the building"。

 2. 匿名類的定義和使用:

  匿名類是一種特殊的內部類,它是在一個表達式內部包含一個完整的類定義。通過對例6-7中go()部分語句的修改,我們可以看到匿名類的使用情況。

  public void go() {
         f=new Frame("Two listeners example");
         f.add("North",new Label("Click and drag the mouse"));
         tf=new TextField(30);
         f.add("South",tf);
         f.addMouseMotionListener(new MouseMotionHandler(){
         /*定義了一個匿名類,類名沒有顯式地給出,只是該類是
          MouseMotionHandler類的子類*/
           public void mouseDragged(MouseEvent e){
             String s="Mouse dragging:X="+e.getX()+"Y
             ="+e.getY();
             tf.setText(s);
           }
         });
         f.addMouseListener(new MouseEventHandler());

         f.setSize(300,300);
         f.setVisible(true);
         }

 3. 內部類的優缺點:

  ◇ 優點:節省編譯后產生的字節碼文件的大小
  ◇ 缺點:使程序結構不清楚

【本講小結】

  類是Java語言面向對象編程的基本元素,它定義了一個對象的結構和功能。 Java類中包含成員變量和成員方法。成員變量有兩種,用static 關鍵字修飾的變量為類變量,無static 修飾的變量為實例變量。相應地,成員方法也有兩種,用static 修飾的為類方法,無static修飾的為實例方法。實例方法不僅可以對當前對象的實例變量進行操作,也可以對類變量進行操作;但類方法只能訪問類變量。實例變量和實例方法必須由實例對象來調用,而類變量和類方法不僅可由實例對象來調用,還可由類名直接調用。Java通過在類定義的大括號里聲明變量來把數據封裝在一個類里,這里的變量稱為成員變量。為了解決類名可能相同的問題,java 中提供包來管理類名空間。

  封裝性、繼承性和多態性是java語言中面向對象的三個特性。接口是java 語言中特有的數據類型,由于接口的存在,解決了java語言不支持多重繼承的問題。內部類是指在一個類的內部嵌套定義的類。

java復習


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日韩欧美亚 | 日日操天天操夜夜操 | 亚洲综合网站 | 国产美女午夜精品福利视频 | 国产一级影院 | 亚欧美| 国产高清不卡视频 | 欧美在线观看第一页 | 国内视频一区二区 | 亚洲国产一区二区三区四区 | 精品国产调教最大网站女王 | 久草视频播放器 | 在线一级毛片 | 久久免费毛片 | 全部免费毛片 | 亚洲va欧美va国产va天堂影 | 国产日韩在线 | 九九99久久精品国产 | 成人嫩草研究院永久网址 | 亚欧成人一区二区 | 国产精品成人观看视频免费 | 亚洲一区二区三区高清 不卡 | 在线观看国产精品入口 | 日韩欧美视频一区二区在线观看 | 99国产精品免费观看视频 | 91精品国产高清91久久久久久 | 最新国产精品久久精品 | 毛片免费看看 | 亚洲精品6久久久久中文字幕 | 欧美精品 日韩 | 色天天干 | 伊在人香蕉99久久 | 色色视频网 | 狠狠狠色丁香婷婷综合久久五月 | 成人在线观看一区 | www.4hu影院| 久久久午夜影院 | 免费精品美女久久久久久久久久 | 香蕉97超级碰碰碰碰碰久 | 免费国产一级 | 女十八毛片 |