欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
java how to program(third edition)——面向對象的編程
 

第九章 面向對象的編程

1java不支持多重繼承(像在C++語(yǔ)言中那樣),但它支持“接口”概念。接口使java獲得了多重繼承的許多優(yōu)點(diǎn),屏棄了相應的缺點(diǎn)。

2.子類(lèi)可以訪(fǎng)問(wèn)其超類(lèi)的public,protected和超類(lèi)的包訪(fǎng)問(wèn)成員(即無(wú)權限修飾符的成員,且和它的超類(lèi)在同一個(gè)包中),如果超類(lèi)不允許通過(guò)繼承的方式產(chǎn)生的子類(lèi)訪(fǎng)問(wèn)它的某些成員,那么它必須以private方式聲明該成員。超類(lèi)的public,protected成員將成為子類(lèi)的public,protected成員。子類(lèi)不能繼承超類(lèi)的構造函數但子類(lèi)的構造函數可以通過(guò)super引用來(lái)調用超類(lèi)的構造函數。

3.對訪(fǎng)問(wèn)protected成員的保護限制介于對訪(fǎng)問(wèn)public成員的保護限制和對訪(fǎng)問(wèn)private成員的保護限制之間。只有超類(lèi)的方法、子類(lèi)的方法以及同一個(gè)包內的其他類(lèi)的方法,才能訪(fǎng)問(wèn)超類(lèi)的protected成員(protected成員可以進(jìn)行包訪(fǎng)問(wèn))。

4.實(shí)例分析

1)源代碼

//超類(lèi)Point2的定義point2.java

package Point;

 

 

public class Point2 {

  protected int x,y;

  //no-argument constructor,mast be included in the superclass,or will incur the compile error;

  public Point2() {

    setPoint(0,0);

  }

  //constructor

  public Point2(int a,int b)

  { setPoint(a,b);}

  public void setPoint(int a,int b)

  {x=a;y=b;}

  public int getX()

  {return x;}

  public int getY()

  {return y;}

  public String toString()

  {return "["+x+","+y+"]";}

}

//子類(lèi)Circle2的定義;circle2.java

package Point;

 

 

public class Circle2 extends Point2{

  protected double radius;

//no-argument constructor

  public Circle2() {

    setRadius(0);

  }

//constructor

  public Circle2(double r,int a,int b){

    super(a,b);  //explict call to superclass constructor;

    setRadius(r);

  }

  public void setRadius(double r)

  {radius=(r>=0.0?r:0.0);}

 

 

  public double getRadius(){return radius;}

 

 

  public double area(){return Math.PI *radius*radius;}

 

 

  public String toString()

  {return "Center="+super.toString()+";Radius="+radius;}//call to superclass toString;

}

//測試主程序;InheritanceTest2.java

package Point;

import java.text.DecimalFormat ;

import javax.swing.JOptionPane ;

 

 

public class InheritanceTest2{

  public static void main(String arg[]){

    Point2 pointRef,p;

    Circle2 circleRef,c;

    String output;

 

 

    p=new Point2(30,50);

    c=new Circle2(2.7,120,89);

 

 

    output="Point p:"+p.toString ()+"\nCircle:"+c.toString ();

 

 

    pointRef=c;  //assign circle to pointRef;

 

 

    output+="\n\nCircle c(via pointRef):"+pointRef.toString ();  /*Polymorphism and dynamic binding,so output the result using the funcion toString of Circle2 */

/*use downcasting(casting a superclass reference to a subclass data type)to assign pintRef to circleRef*/

    circleRef=(Circle2)pointRef;

 

 

    output+="\n\nCircle c(via circleRef):"+circleRef.toString ();

 

 

    DecimalFormat precision2=new DecimalFormat("0.00");

 

 

    output+="\nArea of c(via circleRef):"+

            precision2.format (circleRef.area ());

 

 

    if(p instanceof Circle2){  //judge if the object p is a object of Circle2;

      circleRef=(Circle2)p;

      output+="\n\ncast successfull";

      }

    else

      output+="\n\np does not refer to a circle";

    JOptionPane.showMessageDialog (null,output,

    "Demostrating the \"is a\" relationship",

    JOptionPane.INFORMATION_MESSAGE );

 

 

    System.exit(0);

  }

}

2)程序運行結果:

5.如果在你的類(lèi)的層次結構中定義了finalize方法,子類(lèi)finalize方法應該調用超類(lèi)的finalize方法(形式:super.finalize();),以保證一個(gè)對象所有部分都能正常的終止。

6.引用子類(lèi)對象可以被隱式地轉換為引用超類(lèi)對象,因為根據繼承,子類(lèi)對象“是一個(gè)”超類(lèi)對象。而用子類(lèi)引用引向超類(lèi)對象是語(yǔ)法錯誤。

7.可以用final來(lái)定義方法和類(lèi),聲明為final的方法不能在子類(lèi)中被覆蓋,聲明為staticprivate的方法是隱式的fianl,因為fianl方法的定義永遠不能改變,編譯器按這種方式優(yōu)化程序,即在所有出現final方法調用的地方用方法定義的擴展代碼替換方法調用的語(yǔ)句——這種技術(shù)叫內聯(lián)代碼(inlining the code)。

   聲明為final的類(lèi)不能是超類(lèi),即final類(lèi)不能被繼承,一個(gè)final類(lèi)中的所有方法都是隱式的final。

8.抽象類(lèi):一個(gè)永遠也不需要實(shí)例化對象的類(lèi),它的作用是作為一個(gè)恰當的類(lèi),這樣其他的類(lèi)就可以繼承接口或者實(shí)現。對象能被實(shí)例化的類(lèi)叫具體類(lèi)。抽象類(lèi)用abstract聲明。

9.一個(gè)接口的定義由關(guān)鍵字interface開(kāi)始,并包括一套public abstract方法。接口也可以包含public final static數據。為使用接口;一個(gè)類(lèi)必須聲明它implement接口,而且必須定義接口中的每個(gè)方法,參數個(gè)數及返回類(lèi)型還要與接口中定義的相同。

10java提供了一種稱(chēng)為內部類(lèi)的機制,使類(lèi)可以在其他類(lèi)中定義,這樣的類(lèi)可以是完整的類(lèi)定義或者是“無(wú)名內部類(lèi)”定義。內部類(lèi)主要用于GUI事件處理。

11.內部類(lèi)定義要點(diǎn)

1)含內部類(lèi)的類(lèi)在編譯時(shí)將為每個(gè)內部類(lèi)生成一個(gè)獨立的.class文件。有名字的內部類(lèi)的文件名為“外部類(lèi)名$內部類(lèi)名.class”;無(wú)名內部類(lèi)的文件名為“外部類(lèi)名$#.class”,其中,#時(shí)編譯器給每個(gè)無(wú)名內部類(lèi)的編號,從1開(kāi)始,依次遞增。

2)具有類(lèi)名的內部類(lèi)可以定義為public,protected,包訪(fǎng)問(wèn)或private,其使用限制和類(lèi)的其他成員相同。

3)為了訪(fǎng)問(wèn)外部類(lèi)的this引用,可使用“外部類(lèi)名.this”。

4)外部類(lèi)負責創(chuàng )建它的內部類(lèi)的對象。為了創(chuàng )建另一個(gè)類(lèi)的內部類(lèi)的對象,首先創(chuàng )建這個(gè)外部類(lèi)的一個(gè)對象,并把它賦值給一個(gè)引用(設為ref),然后可用下述形式的語(yǔ)句來(lái)創(chuàng )建內部類(lèi)的對象:

外部類(lèi)名.內部類(lèi)名innerRef=ref.new內部類(lèi)名();

5)內部類(lèi)可以聲明為static。static內部類(lèi)不要求定義一個(gè)外部類(lèi)的對象(但是非static內部類(lèi)卻要求這樣)。static內部類(lèi)不能訪(fǎng)問(wèn)外部類(lèi)的非static成員。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Java Puzzlers(5)更多類(lèi)之謎
Java FAQ(新手必看)
Java:類(lèi)與繼承
Java最常見(jiàn)基礎知識總結
Java中方法的重寫(xiě)(override)
靜態(tài)代碼塊、非靜態(tài)代碼塊、構造函數的執行順序
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久