### 1.1 **项目目标**
**1.1.1 知识目标**
(1)能理解面向对象思想,掌握类的编写方法
(2)能理解并会使用面向对象的特性——封装、继承、多态
(3)会使用面向对象三大特征编写程序
**1.1.2 能力目标**
(1)能够使用面向对象的思想思考现实问题
(2)能够对现实世界的事物进行抽象与归类
(3)能够灵活采用访问修饰符修饰类的属性和方法,达到信息封装的目的
(4)能够通过继承的方式,描述问题中的实际关系并设计父类和子类
(5)能够通过重载和重写实现程序中的多态
**1.1.3 素养目标**
(1)明确类的设计规范,类的命名规范,属性的命名规范,方法的命名规范
(2)能够就封装继承多态的三大特性,以面向对象的思维方式思考程序要解决的问题
### 1.2 **案例描述**
  使用面向对象实现租车系统,系统用户需要完成车辆租赁的操作,并进行租金结算记录。
需求说明:
  汽车租赁系统,有两种车,分别是轿车和客车,所以需要设计两个类,轿车类和客车类,这两个类都要继承自共同的父类,汽车类。使用面向对象实现租车系统,系统用户需要完成车辆租赁的操作,并进行租金结算记录。汽车的租赁信息如下表所示:
![](http://h.yiniuedu.com/8498197ec6e9c7618941c0ad3c743ecf)
### 1.3 **实现效果**
![](http://h.yiniuedu.com/831e707df01390117d17822148490024)![](http://h.yiniuedu.com/ccd23381304d992326d856a98a37d8ed)
### 1.4 **知识点**
本实训项目涉及到的知识点如下:
  类和对象
  继承、封装和多态
  方法的重写和重载
### 1.5 **案例分析**
#### **1.5.1 功能划分**
  系统基本模块包括:
![](http://h.yiniuedu.com/b130437d780fae29dd268add5aea0b98)
#### **1.5.2 概要设计**
  类和属性
汽车类:车牌号、品牌、日租金
客车类:车牌号、品牌、日租金、座位数
轿车类:车牌号、品牌、日租金、型号
汽车业务类:汽车类数组、轿车类数组
汽车租赁管理类:忽略
  首先我们先来看看谁是父类,谁是子类,根据类和属性,我们知道汽车类有:车牌号、品牌、日租金。轿车类有:车牌号、品牌、型号、日租金。客车类有:车牌号、品牌、日租金、座位数等这些参数。那么我们可以发现轿车类和客车类他们共有的属性是车牌号、品牌和日租金,我们就可以把车牌号、品牌和日租金这三个属性提取到父类中去,也就是汽车类中,租金我们搞一个方法。那么此时轿车类和客车只用去继承父类就可以。
#### **1.5.3 详细设计**
![](http://h.yiniuedu.com/6902a77b50a154ea9b075c0d6e7ac000)
### 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:汽车销售系统