国产最新a级毛片无码专区_综合亚洲欧美日韩久久精品_日本成年片在线观看66_一本到九九av电影_一级毛片免费网站播放_国内精品久久人无码大片_国产人成视频99在线观看_欧美不卡在线一本二本_国产亚洲电影av_可以免费看黄色软件

知ing

Java語言程序設(shè)計(jì)(第三版)

邵麗萍,邵光亞,張后揚(yáng) 編 / 清華大學(xué)出版社

拼命菇?jīng)鯜 上傳

查看本書

OOP的特點(diǎn):繼承、封裝、多態(tài)、抽象
5.1  類的繼承
  在Java中,許多類組成層次化結(jié)構(gòu),一個(gè)類的上一層稱為父類,而下一層稱為子類。一個(gè)類要以繼承其父類的變量和方法,繼承特性使Java既靈活方便又能提高效率。
5.1.1  父類和子類
  被繼承的類稱為父類或超類,這個(gè)新類稱為子類。
  子類的創(chuàng)建格式: [<修飾符>] class <子類名> extends <父類名>
            {  ………… }
  例:public  class  Hello2  extends  java.applet.Applet
    public  class  SC  extends  Object  // extends  Object 可以省略
  說明:從Java系統(tǒng)軟件包java.lang中的Object派生來的子類可以不指出父類的名字,一般稱這些類的父類為隱含類。
5.1.2  成員變量的繼承和隱藏
  1.成員變量的繼承
  繼承原則:
(1)子類不能繼承父類的private成員變量
 ?。?)子類能繼承父類的public和protected成員變量
  (3)子類能繼承同一包中有默認(rèn)權(quán)限修飾符的成員變量
  2.成員變量的隱藏
  隱藏原則:子類的成員變量和父類的成員變量同名,父類的成員變量被隱藏(不能繼承)
5.1.3  成員方法的覆蓋
  繼承原則:
  (1)子類不能繼承父類的private成員方法
 ?。?)子類不能繼承父類的構(gòu)造方法
 ?。?)子類能繼承父類的public和protected成員方法
 ?。?)子類能繼承同一包中有默認(rèn)權(quán)限修飾符的成員方法
  覆蓋(隱藏)(override)原則:
  子類的成員方法和父類的成員方法同名,父類的成員方法被覆蓋(隱藏)(不能繼承)
  說明:(1)用來覆蓋的子類方法應(yīng)和被覆蓋的父類方法保持相同名稱和相同返回值類型,以及相同的參數(shù)個(gè)數(shù)和參數(shù)類型。
  (2)可能不需要完全覆蓋一個(gè)方法,部分覆蓋是在原方法的基礎(chǔ)上添加新的功能,即在子類的覆蓋方法中添加一條語句:super.原父類方法名,然后加入其他語句
  (3)不能覆蓋父類中的final方法
 ?。?)不能覆蓋父類中的static方法,但可以隱藏這類方法。即在子類中聲明的同名靜態(tài)方法實(shí)際上隱藏了父類中的靜態(tài)方法
 ?。?)非抽象子類必須覆蓋父類中的抽象方法
5.1.4  this和super
  調(diào)用本類成員和方法格式:
     this.變量名    this.方法名([參數(shù)])
  調(diào)用父類成員和方法格式:
     super.變量名   super.方法名([參數(shù)])
  調(diào)用本類構(gòu)造方法:
     this([參數(shù)列表])  
  調(diào)用父類構(gòu)造方法:
     super([參數(shù)列表])
     
 ?。?)this代表當(dāng)前類或?qū)ο蟊旧?br/>  例:  class  Tree {
      int  h , s , b ;   //成員變量
      Tree(int h , int s , int  b)
       {  this.h=h ;  // this.h為成員變量的h, 右邊h是入口參數(shù)h
         this.s=s ;  this.b=b ;  } }
  (2)super代表父類
        例:    public  class  SC
        { public static void main(String args[])
           { Son a=new Son();
             a.ClearUp(); }
        public  void  ClearUp( )
         { System.out.println("開始打掃");  }  }
        class  Son  extends  SC{
          Son(){System.out.println("今天是周末");}
          public  void  ClearUp()
        { super.ClearUp( );
        System.out.println("已清掃干凈!");  } }
  運(yùn)行結(jié)果:  今天是周末
        開始打掃
        已清掃干凈!
  說明:不需要實(shí)例化父類就可以直接使用super變量
 ?。ǎ常﹕uper()可用來調(diào)用父類的構(gòu)造方法
  Java規(guī)定類的構(gòu)造方法只能由new調(diào)用,程序員不能直接調(diào)用,但可用super( )間接調(diào)用,同理this( )也可間接調(diào)用當(dāng)前類或?qū)ο蟮臉?gòu)造方法
  類的構(gòu)造方法是不能繼承的,因?yàn)闃?gòu)造方法不是類的成員,沒有返回值,也不需要修飾符。
  說明:super( )只能出現(xiàn)在子類的構(gòu)造方法中,而且必須是子類構(gòu)造方法中的第一條可執(zhí)行語句。
5.2  類的多態(tài)
  在一個(gè)類中,可以定義多個(gè)同名的方法,只要確定它們的參數(shù)個(gè)數(shù)和類型不同,這種現(xiàn)象稱為類的多態(tài)
  類的多態(tài)性體現(xiàn)在方法的重載上,包括成員方法和構(gòu)造方法的重載
5.2.1  成員方法的重載
  方法的重載是指對(duì)同名方法的重新定義
  例:  public  void  fun(int a)
     public  void  fun(int a , int b)
     public  void  fun(int a , float b , String s)
     public  int  fun(int  a)  //不是正確的重載
  例:  public  class  SC
     { public double area(float  a) //改成int area(float a)將報(bào)錯(cuò)
       {return  (int)(Math.PI*a*a*100)/100.0 ;} //保留2位小數(shù)
     public double  area(float  a, float  b)
        {return  a*b ;}
     public double  area(float a, float b, float c)
        {float d;
         d=(a+b+c)/2 ;
         return  Math.sqrt(d*(d-a)*(d-b)*(d-c)) ;}
     public static void main(String args[])
       { SC sh=new SC();
        System.out.println("圓面積是: "+sh.area(3));
        System.out.println("矩形面積是: "+sh.area(7,4));
        System.out.println("三角形面積是: "+sh.area(3,4,5)); } }
  運(yùn)行結(jié)果:圓面積是: 28.27
       矩形面積是: 28.0
       三角形面積是: 6.0
  例:見P96
5.2.2  構(gòu)造方法的重載
  例: class  Date( )  {
      Date( ) {……}
      Date(int x, int y ) {……}
      Date(int x, char y ) {……}
     }
     …………
     Date  d1=new  Date( )  
     Date  d2=new  Date(5,’A’ )
     Date  d3=new  Date(5,12)  //分加調(diào)用不同的構(gòu)造方法
作業(yè)P101  5-11
  class Fraction{
    private int f1,f2; 
    Fraction(int x,int y)
      {f1=x;f2=y;}
   void Xc(int i1,int i2,int i3,int i4)
     {f1=i1*i3;
      f2=i2*i4;}
  
  void Dy1()
    {System.out.println(f1+"/"+f2);}
  void Dy2()
    {System.out.println((double)f1/(double)f2);}}
  
  public class SC{
    public static void main(String arg[]){
    Fraction a=new Fraction(0,0);
    a.Xc(4,5,7,3);
    a.Dy1();a.Dy2();} }

查看更多