需求:

2辆宝马,1辆别克商务舱,1辆金龙(34)座,租5天共多少租金。

  轿车 客车(金杯、金龙)
车型 别克商务舱GL8 宝马550i 别克林荫大道 <=16座 >16座
日租费(元/天) 600 500 300 800 1500

新购置了卡车,根据吨位,租金每吨每天50,对系统进行扩展,计算汽车租赁的总租金

实现思路:

类:MotoVehicle(机动车,抽象类),Car,Bus

类中的属性:

MotoVehicle{No(车牌号),Brand(品牌),Color(颜色),Mileage(里程)}

Car{Type(型号),TypeRent(租车的数量*车型日租费)}

Bus{SeatCount(乘载数量),TypeRent(租车的数量*车型日租费)}

实现代码:

MotoVehicle.java

package com.sbx.ex5;

/**
* Created by BlueLover
* Name:苏半夏
* Date:2021/2/7
* Time:16:36
*/
public abstract class MotoVehicle {
private int No;//数量
private String Brand;//品牌
private String Color;//颜色
private String Mileage;//里程
public abstract int CalcRent(int days); public int getNo() {
return No;
} public void setNo(int no) {
No = no;
} public String getBrand() {
return Brand;
} public void setBrand(String brand) {
Brand = brand;
} public String getColor() {
return Color;
} public void setColor(String color) {
Color = color;
} public String getMileage() {
return Mileage;
} public void setMileage(String mileage) {
Mileage = mileage;
}
}

Car.java

package com.sbx.ex5;

/**
* Created by BlueLover
* Name:苏半夏
* Date:2021/2/7
* Time:16:38
*/
public final class Car extends MotoVehicle{
private String Type;//型号
private int TypeRent;//租车的数量*车型日租费 public int getTypeRent() {
return TypeRent;
} public void setTypeRent(int typeRent) {
TypeRent = typeRent;
} public String getType() {
return Type;
} public void setType(String type) {
Type = type;
} @Override
public int CalcRent(int days) {
this.BrandRent(this);
return this.TypeRent*days;
} //根据车的型号和数量
public Car(String type,int no) {
Type = type;
super.setNo(no); }
//定义一个方法用于计算租车的数量*车型日租费
public void BrandRent(Car car){
int DailyRental;
switch (car.getType()){
case "别克商务舱GL8":
DailyRental = 600;
break;
case "宝马550i":
DailyRental = 500;
break;
case "别克林荫大道":
DailyRental = 300;
break;
default:
throw new IllegalStateException("Unexpected value: " + car.getType());
}
car.setTypeRent(super.getNo()*DailyRental);
}
}

Bus.java

package com.sbx.ex5;

/**
* Created by BlueLover
* Name:苏半夏
* Date:2021/2/7
* Time:16:39
*/
public final class Bus extends MotoVehicle{
private int SeatCount; //乘载数量
private int TypeRent;//租车的数量*车型日租费 @Override
public int CalcRent(int days) {
this.BrandRent(this);
return this.TypeRent*days;
} public int getSeatCount() {
return SeatCount;
} public void setSeatCount(int seatCount) {
SeatCount = seatCount;
} public int getTypeRent() {
return TypeRent;
} public void setTypeRent(int typeRent) {
TypeRent = typeRent;
} public Bus(int seatCount,int no) {
SeatCount = seatCount;
super.setNo(no);
}
//定义一个方法用于计算租车的数量*车型日租费
public void BrandRent(Bus bus){
int DailyRental;
if (bus.getSeatCount()>16){
DailyRental = 1500;
}else{
DailyRental = 800;
}
bus.setTypeRent(super.getNo()*DailyRental);
}
}

Truck.java

package com.sbx.ex5;

/**
* Created by BlueLover
* Name:苏半夏
* Date:2021/2/7
* Time:18:53
*/
public class Truck extends MotoVehicle{
private final int ton;//吨
@Override
public int CalcRent(int days) {
return ton*50*days*super.getNo();
} public Truck(int ton,int no) {
this.ton = ton;
super.setNo(no);
}
}

Test.java

package com.sbx.ex5;

/**
* Created by BlueLover
* Name:苏半夏
* Date:2021/2/7
* Time:18:37
*/
public class Test {
public static void main(String[] args) {
/*
* 2辆宝马
1辆别克商务舱
1辆金龙(34)座
租5天共多少租金
*/
//2辆宝马的租金
Car car1 = new Car("宝马550i",2);
car1.CalcRent(5);
//1辆别克商务舱的租金
Car car2 = new Car("别克商务舱GL8",1);
car2.CalcRent(5);
//1辆金龙(34)座的租金
Bus bus = new Bus(34,1);
bus.CalcRent(5);
int sum = car1.CalcRent(5)+car2.CalcRent(5)+bus.CalcRent(5);
System.out.println("2辆宝马,1辆别克商务舱,1辆金龙(34)座,租5天共需要租金"+sum+"元"); Truck truck = new Truck(100,2);
System.out.println("2辆卡车各100吨,租5天共需租金"+truck.CalcRent(5)+"元");
}
}

Java练习——抽象类的更多相关文章

  1. JAVA:抽象类VS接口

    JAVA中抽象类和接口的区别比较,以及它们各自的用途. 1.JAVA抽象类: 抽象类除了不能实例化以外,跟普通类没有任何区别.在<JAVA编程思想>一书中,将抽象类定义为“包含抽象方法的类 ...

  2. 转:二十一、详细解析Java中抽象类和接口的区别

    转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...

  3. 关于JAVA中抽象类和接口的区别辨析

    今天主要整理一下新学习的有关于Java中抽象类和接口的相关知识和个人理解. 1 抽象类 用来描述事物的一般状态和行为,然后在其子类中去实现这些状态和行为.也就是说,抽象类中的方法,需要在子类中进行重写 ...

  4. [ Java学习基础 ] Java的抽象类与接口

    一.抽象类 1. 抽象类 Java语言提供了两种类:一种是具体类:另一种是抽象子类. 2. 抽象类概念: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的 ...

  5. java中抽象类的定义和使用

    java虽然比较简单,但是细节的知识点还是很多的,现在,介绍一下抽象类的定义和实现基础. 指的是在类中定义方法,而不去实现它,而在它的子类中去具体实现,继承抽象类的子类必须实现父类的抽象方法,除非子类 ...

  6. Java基础-抽象类和接口

    抽象类与接口是Java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别. 抽象定义: 抽象 ...

  7. JAVA的抽象类和接口

    抽象类 在面向对象的概念中,所有的对象都是通过类来描述的,但是反过来,并不是所有的类都是用来描述对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类除了不能实例化对 ...

  8. Java中抽象类也能实例化

    在Java中抽象类真的不能实例化么? 在学习的过程中,发现了一个问题,抽象类在没有实现所有的抽象方法前是不可以通过new来构建该对象的,但是抽象方法却是可以有自己的构造方法的.这样就把我搞糊涂了,既然 ...

  9. Java中抽象类也能实例化.RP

    在Java中抽象类真的不能实例化么? 在学习的过程中,发现了一个问题,抽象类在没有实现所有的抽象方法前是不可以通过new来构建该对象的,但是抽象方法却是可以有自己的构造方法的.这样就把我搞糊涂了,既然 ...

  10. Java 中抽象类与接口的区别

    TypeScript 中的接口,有点类似抽象类的概念.Java 中抽象类属于包含属性与抽象行为,而接口通常只是抽象行为.抽象类可以实现模板模式. 参考 https://www.cnblogs.com/ ...

随机推荐

  1. 【uva 714】Copying Books(算法效率--二分+贪心)

    题意:将1个含N个正整数的序列划分成K个连续的子序列,使每段的和的最大值尽量小,问字典序最小的划分方案. 解法:由于是连续的数的"最大值最小",便可想到二分每段的最大值,若这时可分 ...

  2. 煎蛋网爬虫之JS逆向解析img路径

    图片使用js onload事件加载 <p><img src="//img.jandan.net/img/blank.gif" onload="janda ...

  3. 01.原生态jdbc程序中问题总结

    1.数据库启动包配置到工程目录中(mysql5.1) mysql-connector-java-5.1.7-bin.jar 2.jdbc原生态操作数据库(程序) 操作mysql数据库 1 packag ...

  4. Nginx基础 - HTTPS安全web服务

    1.HTTPS配置语法 Syntax: ssl on | off; Default: ssl off; Context: http, server Syntax: ssl_certificate fi ...

  5. ElasticSearch 7.x 学习

    目录 ElasticSearch 7.x 一.前言 1.1.正向索引和倒排索引 1.1.1.正向索引 1.1.2.倒排索引 二.安装 三.ES 基本概念 3.1.索引 3.2.文档 3.4.mappi ...

  6. 缓冲区溢出实验 4 内存管理(类似于malloc free)

    实验环境.代码.及准备 https://www.cnblogs.com/lqerio/p/12870834.html vul4 观察foo函数,可见问题在于最后一次tfree(q).由于之前已经tfr ...

  7. 对于kmp求next数组的理解

    首先附上代码 1 void GetNext(char* p,int next[]) 2 { 3 int pLen = strlen(p); 4 next[0] = -1; 5 int k = -1; ...

  8. 无需扫描即可查找和攻击域SQL Server (SPN)

    无扫描SQL Server发现简介 当您没有凭据或正在寻找不在域中的SQL Server时,使用各种扫描技术来查找SQL Server可能非常有用.但是,此过程可能很嘈杂,耗时,并且可能由于子网未知, ...

  9. Linux 驱动框架---驱动中的中断

    在单片机开发中中断就是执行过程中发生了一些事件需要及时处理,所以需要停止当前正在运行的处理的事情转而去执行中断服务函数,已完成必要的事件的处理.在Linux中断一样是如此使用但是基于常见的中断控制器的 ...

  10. /usr/lib/nvidia-384/libEGL.so.1 is not a symbolic link

    记得要将384改为自己系统对应的a. sudo mv /usr/lib/nvidia-384/libEGL.so.1 /usr/lib/nvidia-384/libEGL.so.1.org sudo ...