1. 程式人生 > 實用技巧 >8.3Java入門--->第十一節

8.3Java入門--->第十一節

1、方法重寫

出現在繼承當中,子類對父類的方法進行改造

也可以說是覆蓋,重置(子類的方法將覆蓋弗雷德方法)

1.重寫的方法必須和覆蓋的方法就有相同的名字,引數和返回值型別

2.不可以出現比父類更嚴格的訪問許可權

3.重寫方法和被重寫方法必須同為static或同不是

4.子類丟擲異常不可以比父類被重寫方法的異常大

5.子類重寫的返回值 型別 可以比父類返回值型別小,或是相同;

總結:若父類的方法對子類不適用,子類可以對父類的方法進行重寫

繼承大練習(其實也不大,如果用Array List做非常簡單)

專案2:客戶資訊管理軟體
目標
•    模擬實現一個基於文字介面的《客戶資訊管理軟體》
•    進一步掌握程式設計技巧和除錯技巧,熟悉面向物件程式設計 
•    主要涉及以下知識點: 
–    類和物件(屬性、方法及構造器) 
–    類的封裝 
–    引用陣列 
–    陣列的插入、刪除和替換 
–    物件的聚集處理 
–    多物件協同工作 
需求說明
模擬實現基於文字介面的《客戶資訊管理軟體》。 
該軟體能夠實現對客戶物件的插入、修改和刪除(用陣列實現),並能夠列印客戶明細表。 
專案採用分級選單方式。主選單如下: 
-----------------客戶資訊管理軟體----------------- 1 添 加 客 戶 2 修 改 客 戶 3 刪 除 客 戶 4 客 戶 列 表 5 退 出 請選擇(1-5):_ • 每個客戶的資訊被儲存在Customer物件中。 • 以一個Customer型別的陣列來記錄當前所有的客戶 • 每次“新增客戶”(選單1)後,客戶(Customer)物件被新增到陣列中。 • 每次“修改客戶”(選單2)後,修改後的客戶(Customer)物件替換陣列中原物件。 • 每次“刪除客戶”(選單3)後,客戶(Customer)物件被從陣列中清除。 • 執行“客戶列表 ”(選單4)時,將列出陣列中所有客戶的資訊 “新增客戶”的介面及操作過程如下所示: …… 請選擇(
1-5):1 ---------------------新增客戶--------------------- 姓名:張三 性別:男 年齡:30 電話:010-56253825 郵箱:[email protected] ---------------------新增完成--------------------- “修改客戶”的介面及操作過程如下所示: …… 請選擇(1-5):2 ---------------------修改客戶--------------------- 請選擇待修改客戶編號(
-1退出):1 姓名(張三):<直接回車表示不修改> 性別(男): 年齡(30): 電話(010-56253825): 郵箱([email protected]):[email protected] ---------------------修改完成--------------------- “刪除客戶”的介面及操作過程如下所示: …… 請選擇(1-5):3 ---------------------刪除客戶--------------------- 請選擇待刪除客戶編號(-1退出):1 確認是否刪除(Y/N):y ---------------------刪除完成--------------------- “客戶列表”的介面及操作過程如下所示: …… 請選擇(1-5):4 ---------------------------客戶列表--------------------------- 編號 姓名 性別 年齡 電話 郵箱 1 張三 男 30 010-56253825 [email protected] 2 李四 女 23 010-56253825 [email protected] 3 王芳 女 26 010-56253825 wang@163.com -------------------------客戶列表完成------------------------- 軟體設計結構 該軟體由以下三個模組組成: CustomerView為主模組,負責選單的顯示和處理使用者操作 CustomerList為Customer物件的管理模組,內部用陣列管理一組Customer物件,並提供相應的新增、修改、刪除和獲取方法,供CustomerView呼叫 Customer為實體物件,用來封裝客戶資訊 Customer類的設計 • Customer為實體類,用來封裝客戶資訊 • 該類封裝客戶的以下資訊: – String name :客戶姓名 – char gender :性別 – int age :年齡 – String phone:電話號碼 – String email :電子郵箱 • 提供各屬性的get/set方法 • 提供所需的構造器 (可自行確定) CustomerList類的設計 • CustomerList為Customer物件的管理模組,內部用陣列管理一組Customer物件 • 本類封裝以下資訊: – Customer[] customers:用來儲存客戶物件的陣列 – int total = 0 :記錄已儲存客戶物件的數量 • 該類至少提供以下方法: – public CustomerList(int totalCustomer) – public boolean addCustomer(Customer customer) – public boolean replaceCustomer(int index, Customer cust) – public boolean deleteCustomer(int index) – public Customer[] getAllCustomers() – public Customer getCustomer(int index) • public CustomerList(int totalCustomer) – 用途:構造器,用來初始化customers陣列 – 引數:totalCustomer:指定customers陣列的最大空間 • public boolean addCustomer(Customer customer) – 用途:將引數customer新增組中最後一個客戶物件記錄之後 – 引數:customer指定要新增的客戶物件 – 返回:新增成功返回true;false表示陣列已滿,無法新增 • public boolean replaceCustomer(int index, Customer cust) – 用途:用引數customer替換陣列中由index指定的物件 – 引數:customer指定替換的新客戶物件 index指定所替換物件在陣列中的位置 – 返回:替換成功返回true;false表示索引無效,無法替換 – public boolean deleteCustomer(int index) – 用途:從陣列中刪除引數index指定索引位置的客戶物件記錄 – 引數: index指定所刪除物件在陣列中的索引位置 – 返回:刪除成功返回true;false表示索引無效,無法刪除 – public Customer[] getAllCustomers() – 用途:返回陣列中記錄的所有客戶物件 – 返回: Customer[] 陣列中包含了當前所有客戶物件,該陣列長度與物件個數相同。 – public Customer getCustomer(int index) – 用途:返回引數index指定索引位置的客戶物件記錄 – 引數: index指定所要獲取的客戶物件在陣列中的索引位置 – 返回:封裝了客戶資訊的Customer物件 CustomerView類的設計 • CustomerView為主模組,負責選單的顯示和處理使用者操作 • 本類封裝以下資訊: – CustomerList customers = new CustomerList(10); 建立最大包含10客戶物件的CustomerList 物件,供以下各成員方法使用。 • 該類至少提供以下方法: – public void enterMainMenu() – private void addNewCustomer() – private void modifyCustomer() – private void deleteCustomer() – private void listAllCustomers() – public static void main(String[] args) • public void enterMainMenu() – 用途:顯示主選單,響應使用者輸入,根據使用者操作分別呼叫其他相應的成員方法(如addNewCustomer),以完成客戶資訊處理。 • private void addNewCustomer() private void modifyCustomer() private void deleteCustomer() private void listAllCustomers() – 用途:這四個方法分別完成“新增客戶”、“修改客戶”、“刪除客戶”和“客戶列表”等各選單功能。 這四個方法僅供enterMainMenu()方法呼叫。 • public static void main(String[] args) – 用途:建立CustomerView例項,並呼叫 enterMainMenu()方法以執行程式。 enterMainMenu()方法的活動圖 鍵盤訪問的實現 • 專案中提供了CMUtility.java類,可用來方便地實現鍵盤訪問。 • 該類提供了以下靜態方法: – public static char readMenuSelection() 用途:該方法讀取鍵盤,如果使用者鍵入’1’-’5’中的任意字元,則方法返回。返回值為使用者鍵入字元。 – public static char readChar() 和 public static char readChar(char defaultValue) 用途:這兩個方法功能相同,均從鍵盤讀取一個字元,並將其作為方法的返回值。 引數: defaultValue — 如果使用者不輸入字元而直接回車,方法將以defaultValue 作為返回值。(提示:此方法可在修改客戶時呼叫) – public static int readInt() 和 public static int readInt(int defaultValue) 用途:這兩個方法功能相同,均從鍵盤讀取一個長度不超過2位的 整數,並將其作為方法的返回值。 引數: defaultValue — 如果使用者不輸入字元而直接回車,方法將以defaultValue 作為返回值。 – public static String readString(int limit) 和 public static String readString(int limit, String defaultValue) 用途:這兩個方法功能相同,均從鍵盤讀取一個長度不超過limit的字串,並將其作為方法的返回值。 引數:limit — 指定字串的最大長度 defaultValue — 如果使用者不輸入字元而直接回車,方法將以defaultValue 作為返回值。 – public static char readConfirmSelection() : 用途:從鍵盤讀取‘Y’或’N’,並將其作為方法的返回值。 第1步 — 實現Customer類 1. 按照設計要求編寫Customer類,並編譯 2. 在Customer 類中臨時新增一個main方法中,作為單元測試方法。 在方法中建立Customer物件,並呼叫物件的各個方法,以測試該類是否編寫正確。 第2步 — 實現CustomerList類 1. 按照設計要求編寫CustomerList類,並編譯 2. 在CustomerList類中臨時新增一個main方法中,作為單元測試方法。 3. 在方法中建立CustomerList物件(最多存放5個客戶物件),然後分別用模擬資料呼叫以下各個方法,以測試各方法是否編寫正確: – addCustomer – replaceCustomer – deleteCustomer – getAllCustomers – getCustomer 4. 進一步測試以下情況,以驗證該類是否編寫正確: – 呼叫addCustomer方法,新增至5個以上客戶物件時 – 當陣列中客戶物件數量為0時,仍然呼叫replaceCustomer方法替換物件 – 當陣列中客戶物件數量為0時,仍然呼叫deleteCustomer方法刪除物件 – 對於replaceCustomer、 deleteCustomer和getCustomer的呼叫,當引數index的值無效時(例如-1或6) – getAllCustomers方法返回的陣列長度是否與實際的客戶物件數量一致 第3步 — 實現CustomerView類 1. 按照設計要求編寫CustomerView類,逐一實現各個方法,並編譯 2. 執行main方法中,測試以下功能: – 主選單顯示及操作是否正確 – “新增客戶”操作是否正確,給使用者的提示是否明確合理;測試當新增的客戶總數超過10時,執行是否正確 – “修改客戶”操作是否正確,給使用者的提示是否明確合理; – “刪除客戶”操作是否正確,給使用者的提示是否明確合理; – “客戶列表”操作是否正確,表格是否規整; 3. 思考以下問題: – 當軟體退出時,所有客戶資訊便丟失了!運用什麼手段可以將這些資訊長久儲存,以便在下一次執行軟體時繼續使用?
package com.xian;

public class Customer {
    private String name;// :客戶姓名
    private String gender;//  :性別
    private int age;//          :年齡
    private String phone;//:電話號碼
    private String email;// :電子郵箱


    public Customer() {
        super();
    }
    public Customer(String name, String gender, int age, String phone, String email) {
        super();
        this.name = name;
        this.gender = gender;
        this.age = age;
        this.phone = phone;
        this.email = email;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    @Override
    public String toString() {
        return "Customer [name=" + name + ", gender=" + gender + ", age=" + age + ", phone=" + phone + ", email="
                + email + "]";
    }

}
package com.xian;
public class CustomerList {

    private Customer[] customers;
    private int total = 0;

    public CustomerList(int totalCustomer) {
        customers = new Customer[totalCustomer];
    }

    public boolean addCustomer(Customer customer)  {
        for(int i=0;i<customers.length;i++) {
            if(customers[i]==null) {
                customers[i] = customer;
                total++;
                return true;
            }
        }
        return false;
    }

    public boolean replaceCustomer(int index, Customer cust) {
        if(index>=customers.length) {
            return false;
        }
        customers[index] = cust;
        return true;
    }

    public boolean deleteCustomer(int index) {
        if(index>=customers.length) {
            return false;
        }
        customers[index] = null;
        total--;
        return true;
    }

    public Customer[] getAllCustomers()  {
        return customers;
    }


    public Customer getCustomer(int index) {
        if(index>=customers.length) {
            return null;
        }
        return customers[index];
    }

    public Customer[] getCustomers() {
        return customers;
    }

    public void setCustomers(Customer[] customers) {
        this.customers = customers;
    }

    public int getTotal() {
        return total;
    }

    public void setTotal(int total) {
        this.total = total;
    }
}
package com.xian;
import java.util.Scanner;
public class CustomerView {
    private CustomerList list = new CustomerList(5);
    private static Scanner scan = new Scanner(System.in);

    public static void main(String[] args) {
        CustomerView cv = new CustomerView();
        cv.enterMainMenu();
    }
    public void enterMainMenu() {
        while(true) {
            while(true) {
                souts();
                int i = scan.nextInt();
                switch (i) {
                    case 1:
                        addNewCustomer();
                        break;
                    case 2:
                        modifyCustomer();
                        break;
                    case 3:
                        deleteCustomer();
                        break;
                    case 4:
                        listAllCustomers();
                        break;
                    case 5:
                        return;
                    default:
                        System.out.println("請選擇(1-5):_");
                        break;
                }
            }
        }


    }

    public void  souts(){
        System.out.println("-----------------客戶資訊管理軟體-----------------");
        System.out.println("1 添 加 客 戶");
        System.out.println("2 修 改 客 戶");
        System.out.println("3 刪 除 客 戶");
        System.out.println("4 客 戶 列 表");
        System.out.println("5 退           出");
        System.out.println("請選擇(1-5):_");
    }
    private void addNewCustomer() {
        while(true) {
            System.out.println("請輸入客戶姓名:");
            String name = scan.next();
            System.out.println("請輸入客戶年齡:");
            int age = scan.nextInt();
            System.out.println("請輸入客戶性別:");
            String gender = scan.next();
            System.out.println("請輸入客戶電話:");
            String phone = scan.next();
            System.out.println("請輸入客戶郵箱:");
            String email = scan.next();

            Customer c = new Customer(name,gender,age,phone,email);
            boolean b = list.addCustomer(c);
            String noti = b?"您插入成功":"您插入失敗";
            System.out.println(noti);
            break;
        }

    }
    private void modifyCustomer(){
        Customer cs=new Customer();
        listAllCustomers();
        System.out.println("選擇需要修改的使用者");
        int id=scan.nextInt();
        if(id>list.getTotal()){
            System.out.println("輸入錯誤");
        }
        soutChange(id,cs);
        list.replaceCustomer(id,cs);
    }

    private void deleteCustomer(){
        while(true){
            System.out.println("請輸入要刪除的序號:");
            int id=scan.nextInt();
            if(id>list.getTotal()){
                System.out.println("輸入錯誤");
            }
            list.deleteCustomer(id);
            return;
        }
    }
    private void listAllCustomers(){
        Customer[] custList=new Customer[10];
        custList=list.getAllCustomers();
        for (int i = 0; i < custList.length; i++) {
            System.out.println(custList[i]);
        }
        return;
    }
    public void soutChange(int id,Customer cs){
        list.getCustomer(id);
        System.out.println("修改姓名");
        cs.setName(scan.next());

        System.out.println("修改性別");
        cs.setGender(scan.next());

        System.out.println("修改年齡");
        cs.setAge(scan.nextInt());

        System.out.println("修改電話");
        cs.setPhone(scan.next());

        System.out.println("修改郵箱");
        cs.setEmail(scan.next());

    }

}