### 1.1 **項目目標**
**1.1.1 知識目標**
(1)能理解面向對象思想,掌握類的編寫方法
(2)能理解并會使用面向對象的特性——封裝、繼承、多態
(3)會使用面向對象三大特征編寫程序
**1.1.2 能力目標**
(1)能夠使用面向對象的思想思考現實問題
(2)能夠對現實世界的事物進行抽象與歸類
(3)能夠靈活采用訪問修飾符修飾類的屬性和方法,達到信息封裝的目的
(4)能夠通過繼承的方式,描述問題中的實際關系并設計父類和子類
(5)能夠通過重載和重寫實現程序中的多態
**1.1.3 素養目標**
(1)明確類的設計規范,類的命名規范,屬性的命名規范,方法的命名規范
(2)能夠就封裝繼承多態的三大特性,以面向對象的思維方式思考程序要解決的問題
### 1.2 **案例描述**
  使用面向對象實現租車系統,系統用戶需要完成車輛租賃的操作,并進行租金結算記錄。
需求說明:
  汽車租賃系統,有兩種車,分別是轎車和客車,所以需要設計兩個類,轎車類和客車類,這兩個類都要繼承自共同的父類,汽車類。使用面向對象實現租車系統,系統用戶需要完成車輛租賃的操作,并進行租金結算記錄。汽車的租賃信息如下表所示:

### 1.3 **實現效果**

### 1.4 **知識點**
本實訓項目涉及到的知識點如下:
  類和對象
  繼承、封裝和多態
  方法的重寫和重載
### 1.5 **案例分析**
#### **1.5.1 功能劃分**
  系統基本模塊包括:

#### **1.5.2 概要設計**
  類和屬性
汽車類:車牌號、品牌、日租金
客車類:車牌號、品牌、日租金、座位數
轎車類:車牌號、品牌、日租金、型號
汽車業務類:汽車類數組、轎車類數組
汽車租賃管理類:忽略
  首先我們先來看看誰是父類,誰是子類,根據類和屬性,我們知道汽車類有:車牌號、品牌、日租金。轎車類有:車牌號、品牌、型號、日租金。客車類有:車牌號、品牌、日租金、座位數等這些參數。那么我們可以發現轎車類和客車類他們共有的屬性是車牌號、品牌和日租金,我們就可以把車牌號、品牌和日租金這三個屬性提取到父類中去,也就是汽車類中,租金我們搞一個方法。那么此時轎車類和客車只用去繼承父類就可以。
#### **1.5.3 詳細設計**

### 1.6 **實現要點**
租車系統設計與實現,請參照編碼命名規范進行設計與實現。
項目名稱:CarRentalSystem
包名稱:com.yiniuedu.cms.rental
1.定義抽象父類Vehicle類,包含一個抽象方法,計算租金的方法public abstract double calRent(int days);。
2.定義Car類,屬性車牌號、品牌、日租金繼承自父類,特有屬性型號。方法有:重新父類計算租金的方法。
3.定義Bus類,屬性車牌號、品牌、日租金繼承自父類,特有屬性座位數。方法有:重新父類計算租金的方法。
4.定義VehicleBusiness類,有轎車數組和客車數組。有初始化轎車和客車數組的方法,有租轎車和租客車的方法。
5.編寫測試類TestVehicle類,通過系統界面提示完成租車業務并計算租金。
### 1.7 **重難點解析**
類的抽象和編寫
封裝、繼承、多態的用法
方法的重載與重寫
### 1.8 **關鍵代碼**
```
//轎車租金的計算方法
public double calRent(int days) {
??double price = getDataRent() * days;
??// 折扣計算
??if (days > 7 && days <= 30) {
???price *= 0.9;
??} else if (days > 30 && days <= 150) {
???price *= 0.8;
??} else if (days > 150) {
???price *= 0.7;
??}
??return price;
?}
//租車業務類里面租車的兩個方法
// 租轎車
?public Car rentCar(String brand, String type) {
??Car c = null;
??for (Car car : car) {
???if (car.getBrand().equals(brand) && car.getCarType().equals(type)) {
????c = car;
????break;
???}
??}
??return c;
?}
?// 租客車
?public Bus rentBus(String brand, int seatNum) {
??Bus b = null;
??for (Bus bus : bus) {
???if (bus.getBrand().equals(brand) && bus.getSeatNum() == seatNum) {
????b = bus;
????break;
???}
??}
??return b;
?}
```
### 1.9 **案例總結**
  在進行基于面向對象思想的編程時,需求描述中的名詞,就是屬性,動詞就是方法。還要充分利用繼承、封裝和多態的思想,使代碼更加簡潔,更加易于修改,增強代碼的可讀性。
  如果加入新的車型,大家思考如何實現,有沒有更好的辦法實現。
### **練習任務**
現有新的需求,要求加入新的車型:貨車,貨車有實際載重量。大家根據課上學習內容,完成貨車租車業務和租金的計算。
貨車(Truck),載重量(capacity)
<table>
<tr>
<td>車型</td>
<td>具體信息</td>
<td>日租金</td>
<td>折扣</td>
</tr>
<tr>
<td rowspan="4">貨車</td>
<td>解放 35噸 (魯Q88888) </td>
<td>5000</td>
<td rowspan="4">大于3天9折</br>大于7天8折</br>大于30天7折</br>大于180天6折</td>
</tr>
<tr>
<td >解放 25噸 (魯Q99999)</td>
<td >4500</td>
</tr>
<tr>
<td >威鈴 10噸 (魯Q77777)</td>
<td >3500</td>
</tr>
<tr>
<td >威鈴 8噸 (魯Q66666)</td>
<td >3000</td>
</tr>
</table>
代碼獲取請加微信:yiniujiaoyu
- Java基礎企業實踐篇
- 一、Java開發環境搭建
- 1.Java的前世今生
- 2.JVM、JRE和JDK的概念及關系
- 3.Java的跨平臺特性
- 4.Java運行機制
- 5.環境搭建
- 二、程序設計基礎
- 1.掌握代碼基本結構
- 2.熟練寫注釋
- 3.掌握標識符的使用
- 4.掌握關鍵字的使用
- 5.掌握常量的使用
- 6.認識變量
- 7.掌握數據類型的使用
- 8.掌握類型轉換
- 9.掌握作用域
- 10.掌握運算符的使用
- 11.掌握順序結構的使用
- 13.掌握循環結構的使用
- 14.掌握方法的使用
- 15.掌握數組的使用
- 16.掌握修飾符的使用
- 三、面向對象語言基礎
- 1.對象的概念
- 2.類的概念
- 3.類和對象的關系
- 4.面向過程和面向對象的區別
- 5.實訓項目:五子棋游戲設計與實現
- 6.案例練習
- 案例一:地址類
- 案例二:員工類
- 案例三:動物狗類
- 案例四:銀行賬戶類
- 案例五:圖書類
- 四、面向對象概念的理解,類和對象
- 1.類的構成
- 2.屬性
- 3.方法和構造方法
- 4.重載和重寫
- 5.變量的作用域
- 6.成員變量和局部變量
- 7.靜態塊的作用和加載機制
- 8.類生成對象的過程
- 9.對象參數傳遞過程
- 五、封裝,繼承,多態
- 1.理解封裝、繼承、多態的概念和目的
- 2.理解封裝、繼承、多態的實現方法和步驟
- 3.掌握Java訪問修飾符
- 4.理解什么是內部類
- 5.理解this、static、final關鍵字
- 6.實訓項目:租車系統設計與實現
- 六、抽象類和接口
- 1.理解抽象類的概念,為什么要有抽象類
- 2.掌握抽象類的聲明格式
- 3.理解什么是接口,為什么要有接口
- 4.掌握接口的定義與實現
- 5.理解接口和抽象類的區別
- 6.實訓案例
- 案例一:電腦模型(OO實現)
- 案例二:銀行轉賬(OO實現)
- 七、Object類和常用API
- 1.理解什么是API
- 2.掌握Java?API文檔的使用
- 3.理解Java類庫的概念
- 4.掌握Object類并掌握該類中的方法
- 5.掌握String類的應用
- 6.掌握StringBuffer、StringBuilder類的應用
- 7.掌握基本數據類型及其包裝類
- 8.掌握Java日期類
- 八、泛型、集合
- 1.理解泛型的概念和實現語法
- 2.理解Java集合框架三大接口:List、Set、Map
- 3.掌握List接口的實現類ArrayList、LinkedList的使用
- 4.掌握HashSet的使用
- 5.掌握HashMap的使用
- 6.掌握Collections類中提供的靜態方法
- 九、異常和IO技術
- 1.理解異常的概念
- 2.掌握異常的分類和Java常見的異常
- 3.理解掌握Java的異常處理機制
- 4.掌握自定義異常
- 5.理解文件系統和File類
- 6.理解I/O概念和分類
- 7.掌握常見的I/O流對象
- 8.掌握文件流與緩沖流
- 十、泛型的延伸
- 1.理解并掌握泛型的基本原理與具體運作過程
- 2.掌握泛型類的定義
- 3.掌握泛型方法的定義
- 十一、流的延伸
- 1.理解數據流的作用
- 2.掌握對象流的作用
- 3.理解對象序列化的概念
- 5.理解線程死鎖
- 4.理解對象反序列化的概念
- 十二、反射技術
- 1.理解反射的概念
- 2.理解反射的工作原理
- 3.理解Reflection API中相關類的作用
- 十三、多線程技術
- 1.理解多線程的概念
- 2.理解線程的狀態與生命周期
- 3.理解多線程通信
- 4.理解線程同步
- 十四、網絡編程技術
- 1.理解網絡編程常用協議TCP/UDP/HTTP/FTP等基礎知識
- 2.掌握TCP網絡編程連接建立的3次握手和4次揮手的具體過程
- 3.掌握UDP網絡通信工作原理
- 4.掌握Socket通信模型的工作原理
- 十五、圖形化界面
- 5.理解線程死鎖
- 十六、JDBC技術
- 1.熟練掌握JDBCAPI中常用接口的基本概念
- 2.理解JDBC連接數據庫的思路和實現方法
- 3.熟練掌握JDBC連接數據庫的基本步驟
- 4.理解并掌握數據庫連接公共類的設計思路和方法
- 5.熟練掌握JDBC使用公共類連接數據庫的基本步驟
- 6.熟練掌握JDBC操作數據庫的基本步驟
- 7.熟練掌握JDBC操作數據庫的SQL語句
- 8.熟練掌握JDBC操作單表的方法及SQL語句
- 9.熟練掌握JDBC操作多表的方法及SQL語句
- 10.理解事務的基本概念
- 11.熟練掌握JDBC在綜合項目的使用方法(包含:基本數據、業務處理等)
- 十七、課外補充
- 附錄1.各種字符集和編碼詳解
- 項目實訓
- 項目2:汽車銷售系統