这part
很重要,类与类关系的理解,类与类之间关系的调用,这玩意不写个几千行代码你玩不转但这过程其实很开心,有什么能够比创造更开心的事呢,希望你们也能给自己下这样定义,你们不是码农,你们是创造者,而编程只是你创造的其中一个工具。对其中一个,编程不应该成为你的所有,那这样编程失去它原本的乐趣,抱着爱上它的心态去学习,相信我,不断的coding能让你爱上它

来来先看业务:

业务1:模拟在路上陆陆续续的有车过去,随时有测速器在监测这些车,如果有车超速,就报警通知警车追赶他
分析有三个类:车, 测速器, 警车

因为是陆陆续续过去的所以在内存中肯定是有个车数组吧,这里我用一个类叫做车库管理下这个车的存储和发车经过测速器,测速器有自己的速度标准如果超速了就调用警车,这时候警车也该有个车库吧
这业务里用到的知识点全面:继承,接口,缺省适配器模式,static方法块,多态,封装思想。
package Catchcar; public interface Car { //定义一个car接口,毕竟无论是路上跑的车还是警车它都能跑嘛,总不能飞吧
public abstract void running(int speed); public abstract void running(String
carNum,String carBrand,int speed);//方法重载 public abstract int getSpeed(); }
package Catchcar; public class RunningCar implements Car { private String
carBrand;//汽车品牌 private String carNum;// private int speed; public RunningCar(
String carBrand,String carNum,int speed){ this.carBrand=carBrand; this.carNum=
carNum; this.speed=speed; } @Override public void running(int speed) {
//发现问题没,,,接口有这样一个弊端,我只想重写接口的某一个方法,但接口的内部机制必须让我重写,这真的很不方便
//方法解决:建立一个抽象类,实现接口,重写不想让子类重写的类,然后类就只继承这个中间的抽象类, //
只继承几个你想要重写类就行了,这叫做缺省适配器模式,基本任何框架任何java封装的数据结构都有这个模式 } @Override public void
running(String carNum,String carBrand,int speed) {//重写Car接口方法 System.out.println
("号码为"+carNum+carBrand+"牌汽车"+"以"+speed+"速度行驶"); } @Override public int getSpeed(
) { return this.speed; } } package Catchcar; public class PoliceCar implements
Car{ //警车的速度---属性,以及他的构造方法 //追车的方法----依赖关系,车是依赖的对象 //获取小汽车速度,根据速度大小判断结果 private
int speed; public PoliceCar(){} public PoliceCar(int speed){ this.speed=speed; }
public void catchCar(RunningCar runningCar){ int carspeed=runningCar.getSpeed();
System.out.println("开始追赶目前警车速为"+this.getSpeed()); if(this.speed>carspeed){ int
time=(this.speed-carspeed); System.out.println(time+"后抓到了"); }else{ System.out.
println("没抓到"); } } @Override public void running(int speed) { } @Override
public void running(String carNum, String carBrand, int speed) { } @Override
public int getSpeed() { return this.speed; } } package Catchcar; public class
CarBase { //这里我建立一个Car 类型的数组对没错这样数组既能方警车又能放普通车(这就是多态的魅力) // private static Car
runningCarbase[]=new Car[5]; private static Car policeCarbase[]=new Car[5];
static { //车库进行初始化 //静态块是子类中第一个执行的,要好好理解类的加载顺序 for(int i=0;i<runningCarbase.
length;i++){ //明白我为啥数组用静态了么,静态元素不能访问非静态元素 //为什么不能访问也请你理解 runningCarbase[i]=new
RunningCar("bentain",""+Math.random(),(int)(Math.random()*10)); //
随机一个数然后把它变成string // math.random方法是在01之间求随机小数,我把它*10 在强制变成int就能随机出0-10之间的数了
//神奇吧,这就是多态的魅力 } //上个for循环里面的i变量出了循环后就消失,后面我可以用同样的名字定义变量不会起冲突 for(int i=0;i<
policeCarbase.length;i++){ policeCarbase[i]=new PoliceCar(8); } } public static
PoliceCargetPoliceCar(){ //遍历一遍车库,如果有车就返回切将该位置变成null PoliceCar policeCar=null;
for(int i=0;i<policeCarbase.length;i++){ if(policeCarbase[i]!=null){ policeCar=(
PoliceCar) policeCarbase[i];//记者车库里的车还是Car类型的, //
只是指向了policeCar子类能够调用子类属性和子类重写方法。 //以前没得选现在想做个好人,需要你强制转成子类 policeCarbase[i]=null;
break; } } return policeCar; } public static RunningCar getRunningCar(){
RunningCar runningCar=null; for(int i=0;i<runningCarbase.length;i++){ if(
runningCarbase[i]!=null){ runningCar =(RunningCar)runningCarbase[i];
runningCarbase[i]=null; //拿到车了就停止循环 break; } } return runningCar; } } package
Catchcar; public class TextMachine { //属性 定义好一个标准的时间 //测量小汽车的方法
//超速?的话调用警察追车的构造方法 private int stander=5; public TextMachine(){} public void
textCar(RunningCar runningcar){ int carSpeed=runningcar.getSpeed(); if(carSpeed>
5){ System.out.println("该车速度为"+carSpeed+"出动警车追赶"); PoliceCar PC =CarBase.
getPoliceCar(); PC.catchCar(runningcar); }else { System.out.println("注意安全"); } }
} package Catchcar; public class TextMaiN { public static void main (String[]
args){ TextMachine textMachine=new TextMachine(); for(int i=0;i<5;i++){
textMachine.textCar(CarBase.getRunningCar()); } } }

技术
©2019-2020 Toolsou All rights reserved,
年薪20万属于什么水平?答案让人扎心!连 CEO 都不香了?这些互联网大佬接连辞任一文揭秘阿里、腾讯、百度的薪资职级百度、阿里、腾讯内部岗位级别和薪资结构,附带求职建议!可怕的不是堕落,而是清楚自己在堕落用C++跟你聊聊“原型模式” (复制/拷贝构造函数)关于keras使用fit_generator中遇到StopIteration惹什么猫都别惹熊猫!「功夫熊猫」20年对人类拿下4血C语言程序设计课程设计 之《学生成绩管理系统》Unity 场景异步加载(加载界面的实现)