1. 程式人生 > >***JAVA入門到精通-第14講-final-作業評講

***JAVA入門到精通-第14講-final-作業評講

   小猴子 繼承了大猴子的一些特點;  但,如果小猴子又想有小鳥飛的能力;魚游泳的能力;  因為,JAVA是單繼承的;  通過介面,實現鳥和魚介面的一些方法;    小猴子繼承猴子的特點並且實現魚的游泳;
 這樣,猴子會游泳,會飛;  通過介面,彌補單繼承的一些缺陷;
   執行的一瞬間才知道是什麼型別-後期繫結; Car car  後期繫結,編譯的時候不知道是什麼型別;     前期繫結
:在編譯的時候就能確定的型別;  後期繫結:在編譯的時候不知道是什麼型別,在執行的時候才能確定是什麼型別;    用final去修飾不希望被別人修改的變數或者方法;        a最好賦初值;如果不賦初值,很可能指向空地址;  程式不夠結實;JAVA程式跑的平臺可能多種多樣的;
   保證成員變數、成員方法不被子類修改;  如果一個變數 是final的,則必須賦初值,否則,無法編譯;
 稅率必須要用final.     final float  rate_aaa_bbb=3.1415926f;    final 類不能夠被繼承;  final修飾類,表示該類不能被繼承;         

實現介面VS繼承類

java繼承是單繼承,也就是一個類最多隻能有一個父類,這種單繼承的機制可保證類的純潔性,比C++中的多繼承機制簡潔。但是不可否認,對子類功能的擴充套件有一定影響。所以:

1實現介面可以看作是對繼承的一種補充。(繼承是層級式的,不太靈活。修改某個類就會打破繼承的平衡,而介面就沒有這樣的麻煩,因為它只針對實現介面的類才起作用)

2實現介面可在不打破繼承關係的前提下,對某個類功能擴充套件,非常靈活。

//例項:建立子類並繼承了父類且連線多個介面[Demo126.java]

public class Demo126 {

    public static void main(String[] args) {

        System.out.println("繼承了Monkey父類");

        Monkey mo=new Monkey();

        mo.jump();

        LittleMonkey li=new LittleMonkey();

        li.swimming();

        li.fly();

    }

}

//介面Fish

interface Fish{

    public void swimming();

}

//介面Bird

interface Bird{

    public void fly();

}

//建立Monkey

class Monkey{

    int name;

    //猴子可以跳

    public void jump(){

        System.out.println("猴子會跳!");

    }

}

//建立LittleMonkey子類並繼承了Monkey父類並連線了FishBird介面

class LittleMonkey extends Monkey implements Fish,Bird{

    public void swimming() {

        System.out.println("連線了Fish介面!");

    }

    public void fly() {

        System.out.println("連線了Bird介面!");

    }

}

-------------------------------------------------------------------------------

用介面實現多型--案例[Demo127.java]

java中多型是個難以理解的概念,但同時又是一個非常重要的概念。java三大特性之一(繼承,封裝,多型),我們可以從字面上簡單理解:就是一種型別的多種狀態,以下通過賣小汽車的例子說明什麼是多型。

//用介面實現多型

public class Demo127 {

    public static void main(String []args){

        CarShop aShop=new CarShop();

        //賣出一輛寶馬

        aShop.sellCar(new BMW());

        //賣出一輛奇瑞QQ

        aShop.sellCar(new CheryQQ());

        //賣出一輛桑塔納

        aShop.sellCar(new Santana());

        System.out.println("總收入:"+aShop.getMoney());

    }

}

//汽車介面

interface Car{

    //汽車名稱

    String getName();

    //獲得汽車售價

    int getPrice();

}

//寶馬

class BMW implements Car{

    public String getName(){

        return "BMW";

    }

    public int getPrice(){

        return 300000;

    }

}

//奇瑞QQ

class CheryQQ implements Car{

    public String getName(){

        return "CheryQQ";

    }

    public int getPrice(){

        return 20000;

    }

}

//桑塔納汽車

class Santana implements Car{

    public String getName(){

        return "Santana";

    }

    public int getPrice(){

        return 80000;

    }

}

//汽車出售店

class CarShop{

    //售車收入

    private int money=0;       

    //賣出一部車

    public void sellCar(Car car){

        System.out.println("車型:"+car.getName()+"單價:"+car.getPrice

());

        //增加賣出車售價的收入

        money+=car.getPrice();

    }

    //售車總收入

    public int getMoney(){

        return money;

    }

}

執行結果:

車型:BMW 單價:300000

車型:CheryQQ 單價:20000

總收入:320000

繼承是多型得以實現的基礎。從字面上理解,多型就是一種型別(都是Car型別)表現出多種狀態(寶馬汽車的名稱是BMW,售價是300000;奇瑞汽車的名稱是CheryQQ,售價是2000)。將一個方法呼叫同這個方法所屬的主體(也就是物件或類)關聯起來叫做繫結,分前期綁這下和後期繫結兩種。下面解釋一下它們的定義:

1、前期繫結:在程式執行之前進行繫結,由編譯器和連線程式實現,又叫做靜態繫結。比如static方法和final方法,注意,這裡也包括private方法,因為它是隱式final的。

2、後期繫結:在執行時根據物件的型別進行繫結,由方法呼叫機制實現,因此又叫做動態繫結,或者執行時繫結。除了前期繫結外的所有方法都屬於後期繫結。

多型就是在後期繫結這種機制上實現的。多型給我們帶來的好處是消除了類之間的偶合關係,使程式更容易擴充套件。比如在上例中,新增加一種型別汽車的銷售。只需要讓新定義的類實現Car類並實現它的所有方法,而無需對原有程式碼做任何修改,CarShop類的sellCar(Car

car)方法就可以處理新的車型了。

新增程式碼如下:

java程式碼

//桑塔納汽車

class Santana implements Car{

    public String getName(){

        return "Santana";

    }

    public int getPrice(){

        return 80000;

    }

}

-------------------------------------------------------------------------------

java面向物件程式設計(3)--final

final概念

final中文意思:最後的,最終的。

final可以修飾變數或者方法。

在某些情況下,程式設計師可能有以下需求:

1、當不希望父類的某個方法被子類覆蓋(override)時,可以用final關鍵字修飾。

2、當不希望類的某個變數的值被修改,可以用final修飾。如果一個變數是final,則必須賦初值,否則編譯出錯。

3、當不希望類被繼承時,可以用final修飾。

//final方法的使用[Demo128.java]

public class Demo128 {

    public static void main(String[] args) {

        Aaa aaa=new Aaa();

        aaa.show();

        Bbb bbb=new Bbb();

        bbb.show();

    }

}

class Aaa{

    int a=0;//如果a不賦初值,a0定義型別後應賦值

    //圓周率不讓修改

    //帶有final修飾的變數命名時應有_下劃線來區分表示。這是java程式設計師的標準。

    final float reate_1=3.1415926f;//使用final可以保證,需要強制不被修改的資料一定要用final鎖定

    //final int b;  //使用final定義變數時一定要賦初值否則報錯。

    //b=1;

    final public void sendMes(){//給成員方法用final來修飾則表示不可以被修改,不可被覆蓋。

        System.out.println("傳送訊息");

    }

    public void show(){

        System.out.println("a="+a);

    }

}

final class Bbb extends Aaa{//定義類前加final表示該類不允許被繼承

    public Bbb(){

        a++;

        //reate_1=reate+1;

    }

    /*public void sendMes(){

        System.out.println("傳送訊息")

    }*/

}

final--注意事項

1final修飾的變數又叫常量,一般用XX_XX_XX來命名。(帶下劃線)

2final修飾的變數在定義時,必須賦值,並且以後不能再賦值。

final--什麼時候用

1、因為案例的考慮,類的某個方法不允許修改。

2、類不會被其它的類繼承。

3、某些變數值是固定不變的,比如圓周率3.1415926


作業評講:


手掌遊戲機一臺X元,mp3一臺Y(X,Y,N,M,Z由使用者輸入)

公司舉行抽獎大會,一等獎遊戲機N臺,二等獎mp3 M臺。公司共有Z人。問總價為多少,公司實際平均給每人花費了多少錢。

//計算總費用和平均費用

import java.util.*;//載入包

public class Work06{

    public static int gbGame=0;//靜態變數

    public static int gbGameT=0;

    public static int mp3=0;

    public static int mp3T=0;

    public static int people=0;

    public static void main(String []args){

        Scanner myScanner=new Scanner(System.in);//呼叫鍵盤輸入

        System.out.print("請輸入手掌遊戲機價格:");

        gbGame=myScanner.nextInt();

        System.out.print("請輸入MP3價格:");

        mp3=myScanner.nextInt();

        System.out.print("請輸入手掌遊戲機數量:");

        gbGameT=myScanner.nextInt();

        System.out.print("請輸入MP3數量:");

        mp3T=myScanner.nextInt();

        System.out.print("請輸入員工數:");

        people=myScanner.nextInt();

        showInfo();//呼叫showInfo方法

        }

    public static void showInfo(){ // 建立showInfo方法

        int total=gbGame*gbGameT+mp3*mp3T;//總價

        float average=(float)total/people;//平均價

        System.out.printf("總價: %d,平均價是: %f \n",total,average);

    }

}

**************************************************************


請大家採用面向物件思想設計超級馬里奧遊戲人物。並能用鍵盤輸入命令,來控制馬里奧的位置[Work13.java]


//超級馬里奧人物建造及控制檯數字操作

import java.util.*;

public class Work13 {

    public static void main(String[] args) {

        Scanner sr=new Scanner(System.in);//接收鍵盤輸入

        System.out.println("輸入1-25的數字,你可以移動馬里奧,輸入其它數字退出");

        int i=sr.nextInt();//將鍵盤輸入數字賦值給i

        Maria m=new Maria();//建立呼叫Maria構造方法

        for(int a=i;a<=25;a--){

            if(i<25){

                m.move(i);

                i=sr.nextInt();

            }else{

                System.out.println("退出遊戲!");

                break;

            }

        }

    }

}

class Maria{

    int x,y;

    //構造方法,初始化場景;確定地圖,Maria的位置

    public Maria(){

        System.out.println("I'm Maria \n"+"@");

    }

    public void move(int i){

        for(int k=1;k<=25;k++){

            if(k==i){

                System.out.printf("@");

            }else{

                System.out.printf(".");

            }

        }

    }

}


 


   

int i=4;

switch(i){

    default;

    System.out.println("default");//執行此語句

case 0:

    System.out.println("zero");//執行此語句

break;

case 1:

System.out.println("one");

case 2:

System.out.println("two");

}

   

   
  1. int i=1;
  2. switch(i){
  3. default:
  4. System.out.println("default");
  5. case 0:
  6. System.out.println("zero");
  7. break;
  8. case 1:
  9. System.out.println("one");//執行此語句
  10. case2:
  11. System.out.println("two");//執行此語句
  12. }

 
 

來自為知筆記(Wiz)