小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

什么是object指向?

 思奇劍 2006-11-15

 

 

什么是object指向?

 

 

按照上次的約定,本講我們將要學(xué)習(xí)有關(guān)object指向的知識(shí)了。

 

光名字都聽(tīng)不懂啊。

 

可能聽(tīng)起來(lái)比較難懂,但學(xué)起來(lái)卻是很簡(jiǎn)單的。

.

1.     實(shí)例

 

首先讓我們從類與實(shí)例學(xué)起吧。

 

類好像在哪里聽(tīng)說(shuō)過(guò)。

 

小尼克糊涂了吧。到目前為止咱們學(xué)的程序的開(kāi)頭都有“類”不是嗎?

 

啊!是 嗎~

 

恩。我們一直在使用類,本講就要對(duì)類進(jìn)行一下說(shuō)明了。

 


 

1.1.      

 

首先要說(shuō)明一下所謂的類就是程序里類似設(shè)計(jì)圖的東西。以設(shè)計(jì)圖為基準(zhǔn)來(lái)生成實(shí)例。

 

 

用簡(jiǎn)單易懂的車的例子來(lái)說(shuō)明一下。車有設(shè)計(jì)圖曉得吧。

 

恩。根據(jù)設(shè)計(jì)圖把車制造出來(lái)。

 

不錯(cuò)。也就是說(shuō),類相當(dāng)于設(shè)計(jì)圖,而實(shí)例相當(dāng)于制作完成的車。

 

 

 

 

 

從類(設(shè)計(jì)書)生成

實(shí)例(車)。


 

博士,在類里面具體都寫些什么呀?

 

類里面定義了要制作實(shí)例的結(jié)構(gòu)和動(dòng)作。我們以車為例來(lái)學(xué)習(xí)object指向。下面先看車的類。

 

 


Car{

 

      int number;//編號(hào)

      String name;//名稱

      String maker;//廠家

      String color;//顏色

}


 

 

 

車類里有制造編號(hào)、名稱、廠家以及車顏色一系列的實(shí)例變量。

 

是的。上面的程序只是定義了車固有的數(shù)據(jù),對(duì)其進(jìn)行改良后就成為下面定義車的操作的方法。

 


Car{

 

      int number;//制造編號(hào)

      String name;//名稱

      String maker;//廠家

      String color;//顏色

     

      /**

       * 行走

       **/

      void run(){

           //行走處理

          

      }

     

      /**

       * 轉(zhuǎn)換方向

       **/

      void turn(int angle){

           //轉(zhuǎn)向處理

          

      }

}


 

 

 

增加了run()turn()方法。

 

恩。就是在車類里面多了“行走”和“轉(zhuǎn)換方向”的操作。

 


 

1.2.       實(shí)例化

 

根據(jù)類這個(gè)設(shè)計(jì)圖制作實(shí)例被稱為實(shí)例化。下面就讓我們來(lái)看一下使用車類來(lái)制作車實(shí)例的例子。實(shí)例化利用下面的編碼進(jìn)行。

 


類名 實(shí)例名=new 類名;


 

 

以前學(xué)的模板的source code也用上了。

 

不錯(cuò)。對(duì)車類進(jìn)行實(shí)例化按下面這樣書寫就可以了。

 


Car car = new Car();


 

 

這個(gè)車類的實(shí)例變量和方法怎么用呢?

 

要使用“.

 


實(shí)例名.變量名

實(shí)例名.方法名


 


 

 

下面的程序是訪問(wèn)實(shí)例的方法的sample。車的行走處理和車的轉(zhuǎn)向處理就是在message panel里顯示字符串的東西。

 


import javax.microedition.midlet.MIDlet;

import javax.microedition.midlet.MIDletStateChangeException;

 

 

/**

 * sample programme

 */

public CarApp extends MIDlet {

 

      /**

       * 開(kāi)始處理

       */

      protected void startApp() throws MIDletStateChangeException {

          

           //實(shí)例化

           Car car = new Car();

          

           //設(shè)定實(shí)例變量

           car.number = 6684;

           car.name = "";

           car.maker = "NEC";

           car.color = "blue";

          

           //調(diào)用方法

           car.run();

           car.turn();

      }

     

      protected void pauseApp() {}

 

      protected void destroyApp(boolean arg0) throws MIDletStateChangeException {}

}

 

 

Car{

 

      int number;//制造編號(hào)

      String name;//名稱

      String maker;//廠家

      String color;//顏色

     

      /**

       * 行走

       **/

      void run(){

           //行走處理

           System.out.println(name + " is running!");

      }

     

      /**

       * 轉(zhuǎn)換方向

       **/

      void turn(){

           //轉(zhuǎn)向處理

           System.out.println(name + " is turning.");

      }

}


 

 


 

 

運(yùn)行程序,如下所示。

 

 

 

2.     封裝

2.1.       public interface

 

這么說(shuō)來(lái),模板程序里面的“public”和“private”是帶有類、實(shí)例變量和方法的定義部分?是什么意思呢?

 

哦,問(wèn)的好啊。使用“publicprivate是為了進(jìn)行封裝

 

封裝?

 

就舉車類的例子來(lái)看,要生成實(shí)例就要設(shè)定制造編號(hào)、名稱、廠家和車顏色。這樣生成的實(shí)例也是可以更改實(shí)例變量的。

 

是這樣的。

 

但是,制造編號(hào)、名稱以及廠家在車子被制造出來(lái)那一刻就是確定的,之后是不能變更的或者說(shuō)不容易變更的。

 

制造編號(hào)是用來(lái)進(jìn)行車的管理的,如果途中隨便更改會(huì)增添麻煩。但是,只要制造者自己確定不變更的話就沒(méi)關(guān)系吧。

 

恩。也許吧。但是,如果programme規(guī)模大的話,就有可能涉及多人開(kāi)發(fā)。這時(shí)若有人錯(cuò)誤的隨便更改制造編碼,就會(huì)給別人造成大的麻煩。這樣的事情也是有的。

 

我沒(méi)有考慮到許多人一起做的情況。這么說(shuō)“public”和“private”可以防止這樣的事情發(fā)生是嗎?

 

沒(méi)錯(cuò)。使用“private”就禁止了從類外面訪問(wèn)實(shí)例變量或方法。與之相反,若使用“public”則可以從類外面訪問(wèn)實(shí)例變量和方法。使用“public”可以從類外面訪問(wèn)的實(shí)例變量和方法被稱為public interface。車類的實(shí)例變量中只有顏色是后來(lái)可以變更的。

 

車可以被制造出來(lái)之后再涂顏色是吧。

 


 

2.2.       構(gòu)造器

 

 

生成實(shí)例時(shí),要使用進(jìn)行初始化的構(gòu)造器方法。

 

?。∫郧坝眠^(guò)啊。就是和類名相同名稱的方法吧。

 

對(duì)呀對(duì)呀。如下所示進(jìn)行定義。當(dāng)然作為public interface,為了能從外面訪問(wèn)要加上“public”。

 


/**

 * 構(gòu)造器

 */

public 類名(){

         //初始化處理

        

}


 

 

車類的構(gòu)造器如下方式書寫。

 


      /**

       * 構(gòu)造器

       */

      public Car(int number,String name,String maker,String color){

           this.number = number;

           this.name = name;

           this.maker = maker;

           this.color = color;

      }



 

2.3.       accessory method

 

但是,對(duì)實(shí)例變量使用“private”,那不就是不能看到實(shí)例變量了?如果想要使用變量值時(shí)怎么辦呢?

 

是啊。進(jìn)行private定義后,就不能看到值了。

 

正因?yàn)橛羞@樣不方便,所以就出現(xiàn)了解決方法,能看到值的accessory method。也就是可以訪問(wèn)private變量的方法。車類的accessory method如下所示。

 


/*******************************************

       * accessory method

       *******************************************/

     

      /**

       * 取得顏色

       */

      public String getColor() {

           return color;

      }

 

      /**

       * 取得廠家

       */

      public String getMaker() {

           return maker;

      }

 

      /**

       * 取得名稱

       */

      public String getName() {

           return name;

      }

 

      /**

       * 取得制造編號(hào)

       */

      public int getNumber() {

           return number;

      }

 

      /**

       * 設(shè)定顏色

       */

      public void setColor(String string) {

           color = string;

      }


 

 

真不錯(cuò)!使用public interface就可以看到“private”的實(shí)例變量了。

 

不錯(cuò)。下面的程序是封裝的類以及使用它的sample程序。

 


import javax.microedition.midlet.MIDlet;

import javax.microedition.midlet.MIDletStateChangeException;

 

 

/**

 * sample pragramme

 */

public CarApp extends MIDlet {

 

      /**

       * 開(kāi)始處理

       */

      protected void startApp() throws MIDletStateChangeException {

          

           //實(shí)例化

           Car car = new Car(6684,"java","NEC","blue");

          

           //調(diào)用方法

           car.run();

           car.turn();

          

           //涂顏色

           System.out.println(car.getName() + "‘s color is " + car.getColor());

           car.setColor("Red");//涂顏色

           System.out.println(car.getName() + "‘s color is " + car.getColor());

      }

     

      protected void pauseApp() {}

 

      protected void destroyApp(boolean arg0) throws MIDletStateChangeException {}

}

 

Car{

 

      private int number;//制造編號(hào)

      private String name;//名稱

      private String maker;//廠家

      private String color;//顏色

     

      /**

       * 構(gòu)造器

       */

      public Car(int number,String name,String maker,String color){

           this.number = number;

           this.name = name;

           this.maker = maker;

           this.color = color;

      }

     

      /**

       * 行走

       **/

      public void run(){

           //行走處理

           System.out.println(name + " is running!");

      }

     

      /**

       * 轉(zhuǎn)換方向

       **/

      public void turn(){

           //轉(zhuǎn)向處理

           System.out.println(name + " is turning.");

      }

     

      /*******************************************

       * accessory method

       *******************************************/

     

      /**

       * 取得顏色

       */

      public String getColor() {

           return color;

      }

 

      /**

       * 取得廠家

       */

      public String getMaker() {

           return maker;

      }

 

      /**

       * 取得名稱

       */

      public String getName() {

           return name;

      }

 

      /**

       * 取得制造編號(hào)

       */

      public int getNumber() {

           return number;

      }

 

      /**

       * 設(shè)定顏色

       */

      public void setColor(String string) {

           color = string;

      }

 

}


 

 

程序運(yùn)行后結(jié)果如下。

 

 

 

3.     繼承

 

 

下面我們就對(duì)object指向編程中重要的繼承進(jìn)行說(shuō)明。所謂的繼承,就是以某個(gè)類為基礎(chǔ)定義新的類。

 

什么意思啊

 

確實(shí)繼承是object指向中比較難的概念之一。但是學(xué)會(huì)了就很簡(jiǎn)單了。還以車為例進(jìn)行說(shuō)明吧。

 

剛才的車類嗎。

 

恩。這次我們來(lái)用卡車作為新例子吧??ㄜ囈灿?#8220;制造編號(hào)”“名稱”“廠家”這些變量。

 

與車一樣啊。

 

除此之外為了對(duì)卡車運(yùn)輸?shù)奈锲愤M(jìn)行管理,又加入了“負(fù)荷”這個(gè)變量。

 

 

 

 

程序?qū)懗鰜?lái)是這樣的。

 

 


Trailer{

     

      private int number;//制造編號(hào)

      private String color;//顏色

      private String maker;//廠家

      private String name;//名稱

      private String cargo;//負(fù)荷

     

      /**

       * 構(gòu)造器

       */

      public Trailer(int number,String name,String maker,String color,String cargo){

           this.number = number;

           this.name = name;

           this.maker = maker;

           this.color = color;

           this.cargo = cargo;

      }

     

      /**

       * 行走

       **/

      public void run(){

           //行走處理

           System.out.println(name + " is running!");

      }

     

      /**

       * 轉(zhuǎn)換方向

       **/

      public void turn(){

           //轉(zhuǎn)向處理

           System.out.println(name + " is turning.");

      }         

     

      /*******************************************

       * accessory method

       *******************************************/

     

      /**

       * 取得顏色

       */

      public String getColor() {

           return color;

      }

 

      /**

       * 取得廠家

       */

      public String getMaker() {

           return maker;

      }

 

      /**

       * 取得名稱

       */

      public String getName() {

           return name;

      }

 

      /**

       * 取得制造編號(hào)

       */

      public int getNumber() {

           return number;

      }

 

      /**

       * 設(shè)定顏色

       */

      public void setColor(String string) {

           color = string;

      }

     

      /**

       * 取得負(fù)荷

       */

      public String getCargo(){

           return cargo;

      }

     

      /**

       * 設(shè)定負(fù)荷

       */

      public void setCargo(String cargo){

           this.cargo = cargo;

      }

}


 

 

 

卡車類和車類感覺(jué)一樣啊,是因?yàn)榭ㄜ囀擒嚨囊环N嗎?

 

觀察的不錯(cuò)啊。當(dāng)然,卡車是車的一種。換一種說(shuō)法,也就是把卡車進(jìn)行抽象化就是車。

 

抽選象化是指把類抽象化嗎?

 

差不多的意思吧。這個(gè)程序里面,車類和卡車類只是source code,并沒(méi)有表示“卡車抽象化之后就是車”這個(gè)概念。

 

恩,確實(shí)只看source code的話,并看不出來(lái)車與卡車的關(guān)系

 

這就用到了“繼承”。以車類為基礎(chǔ)制作卡車類,就表示“卡車類的抽象概念即為車類”。繼承車類的卡車類的source code如下所示。繼承,需要使用構(gòu)造器調(diào)用繼承之類的構(gòu)造器 method。也就是下面第九行的super()

 


Trailer extends Car{

     

      private String cargo;//負(fù)荷

     

      /**

       * 構(gòu)造器

       */

      public Trailer(int number,String name,String maker,String color,String cargo){

           super(number,name,maker,color);//調(diào)用繼承之類的構(gòu)造器

           this.cargo = cargo;

      }

     

      /*******************************************

       * accessory method

       *******************************************/

     

      /**

       * 取得負(fù)荷

       */

      public String getCargo(){

           return cargo;

      }

     

      /**

       * 積荷を設(shè)定する設(shè)定負(fù)荷

       */

      public void setCargo(String cargo){

           this.cargo = cargo;

      }

}


 

 

 

呃?博士,卡車類里面只有負(fù)荷的實(shí)例變量嗎?其他的實(shí)例變量和方法是不是忘了?

 

呵,呵,呵。事實(shí)上,繼承類后,繼承的類的實(shí)例變量和方法就不需要再定義就可以使用了。

 

呃?也就是說(shuō)雖然上面的程序里面沒(méi)有寫,但是卡車類里也具有車類里面的制造編號(hào)和名稱等變量?

 

不錯(cuò),就是這樣,很方便吧。下面就是使用了繼承車類的卡車類的sample programme。

 



import javax.microedition.midlet.MIDlet;

import javax.microedition.midlet.MIDletStateChangeException;

 

 

/**

 * sample programme

 */

public CarApp extends MIDlet {

 

      /**

       * 開(kāi)始處理

       */

      protected void startApp() throws MIDletStateChangeException {

          

           //實(shí)例化

           Trailer trailer = new Trailer(6684,"java-Trailer","NEC","blue","N820");

          

           //調(diào)用方法

           trailer.run();

           trailer.turn();

                     

           //改變負(fù)荷

           trailer.setCargo("N800");

           System.out.println(trailer.getName() + "‘s cargo is " + trailer.getCargo());

      }

     

      protected void pauseApp() {}

 

      protected void destroyApp(boolean arg0) throws MIDletStateChangeException {}

}

 

 

Trailer extends Car{

     

      private String cargo;//負(fù)荷

     

      /**

       * 構(gòu)造器

       */

      public Trailer(int number,String name,String maker,String color,String cargo){

           super(number,name,maker,color);

           this.cargo = cargo;

      }

     

      /*******************************************

       * accessory method

       *******************************************/

     

      /**

       * 取得負(fù)荷

       */

      public String getCargo(){

           return cargo;

      }

     

      /**

       * 設(shè)定負(fù)荷

       */

      public void setCargo(String cargo){

           this.cargo = cargo;

      }

}

 

 

Car{

 

      private int number;//制造編號(hào)

      private String name;//名稱

      private String maker;//廠家

      private String color;//顏色

     

      /**

       * 構(gòu)造者

       */

      public Car(int number,String name,String maker,String color){

           this.number = number;

           this.name = name;

           this.maker = maker;

           this.color = color;

      }

     

      /**

       * 行走

       **/

      public void run(){

           //行走處理

           System.out.println(name + " is running!");

      }

     

      /**

       * 轉(zhuǎn)換方向

       **/

      public void turn(){

           //轉(zhuǎn)向處理

           System.out.println(name + " is turning.");

      }

     

      /*******************************************

       * accessory method

       *******************************************/

     

      /**

       * 取得顏色

       */

      public String getColor() {

           return color;

      }

 

      /**

       * 取得廠家

       */

      public String getMaker() {

           return maker;

      }

 

      /**

       * 取得名稱

       */

      public String getName() {

           return name;

      }

 

      /**

       * 取得制造編號(hào)

       */

      public int getNumber() {

           return number;

      }

 

      /**

       * 設(shè)定顏色

       */

      public void setColor(String string) {

           color = string;

      }

 

}

 

這樣,誰(shuí)看到source code都不會(huì)把程序弄錯(cuò)了。これだと、誰(shuí)がソースコードを見(jiàn)ても間違えずにプログラムできそうですね。

 

呵呵。明白Object指向多重要了吧。

上面程序運(yùn)行后的結(jié)果如下。

 

 

 

4.     下一講

 

本講講座幾乎沒(méi)有涉及Java技術(shù)。覺(jué)得怎么樣?

 

恩,對(duì)object了解一些了。但繼承有點(diǎn)難。

 

本講講的東西是object指向最基礎(chǔ)的東西。事實(shí)上,我們今后還要進(jìn)行更深入的學(xué)習(xí)。

 

明白了,下一講我們學(xué)什么呢?

 

下一講我們講動(dòng)畫。學(xué)習(xí)怎樣使圖像在畫面上移動(dòng)。

 

這可是制作游戲必須的呀。好期待

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多