類與類依賴關系,實例;


 

 

 4個java文件:豬(Pig類);農夫養豬(返回Pig類型);屠夫殺豬(傳入參數為Pig類型);java主方法程序運行的入口;

java中使用到了包,方便類的查找和使用;

 各個java文件代碼如下:

package relyon;
public class Farmer{
	public Pig raise(int month){
		Pig aa=new Pig("黑豬");//依賴
		aa.growUp(month);
		return aa;
	}
}//參數幾個月,返回值一頭豬;
package relyon;
public class Butcher{
	
	public void killPig(Pig aa){
		System.out.println("屠夫開始殺豬");		
		int tizhong=aa.getWeight();
		String name=aa.getName();	
		System.out.println(name+"體重:"+tizhong);
		aa.beKilled();
		
	}
}

 

package relyon;
public class Pig{
	public String name;
	public int weight=20;	
	public Pig(){
	}
	public Pig(String name){
		this.name=name;		
	}//構造方法;
	public void beKilled(){
		System.out.println(name+"好慘");
	}
	public void growUp(int month){
		for(int i=1;i<=month;i++){
			weight*=2;
		}
	}//每月體重是上一個月的2倍;長的過程;
	public int getWeight(){
		return weight;
	}//查看體重;
	
	public String getName(){
		//this.name=name;
		return name;
	}
}
package relyon;
public class Test{
	public static void main(String[] args){
		Farmer xixi=new Farmer();
		Pig zhuzhu=xixi.raise(3);
		
		Butcher qq=new Butcher();
		qq.killPig(zhuzhu);
	}

}

 編譯執行

 

 

 

 

 

分析思路:

  1.分析一共有幾個具體的類;

    機房 電腦 學生;

  2.分析類和類之間的關系

    學生--電腦 依賴關系

    機房--電腦 聚合關系

    機房--學生 依賴關系

  3.分別描述3個類;

    電腦;屬性--狀態;方法--被打開,被關閉,被使用;

    機房;屬性--電腦;方法--歡迎學生進來;

    學生;方法--使用電腦;

  4.測試

    創建對象 對象去做事情;

 

 

package student;
public class Computer{
	private int number;//電腦編號;
	private boolean used=false;//true 開着的;
	public Computer(){
		
	}
	public Computer(int number){
		this.number=number;
		
	}//構造方法重載;
	public void beOpen(){
		used=true;
		System.out.println("開機成功");
	}
	public void beUsing(){
		System.out.println("正在被使用");
		
	}
	public void beClose(){
		used=false;
		System.out.println("關機成功");
	}
	
}

  

package student;
public class MachineRoom{
	public Computer cc=new Computer(1);
	public void welcomeStudent(Student aa){
		String bb=aa.getName();//獲取學生名字
		System.out.println(bb+"學生歡迎您來");
		aa.useComputer(cc);
	}
}

  

package student;
public class Student{
	private String name;//名字
	public Student(){};
	public Student(String name){
		this.name=name;
	}//構造方法重載;
	public String getName(){
		return name;
	}//獲取名字
	public void useComputer(Computer aa){
		System.out.println(name+"學生開始使用電腦啦");
		aa.beOpen();
		aa.beUsing();
		aa.beClose();
	}//學生使用電腦
}

  

    

package student;
public class Test{
	public static void main(String[] args){
		MachineRoom x=new MachineRoom();
		Student y=new Student("夏雨");
		x.welcomeStudent(y);
		
	}
}

 

 5個學生陸續進入機房;

package student;
public class Computer{
	private int number;//電腦編號;
	private boolean used=false;//true 開着的;
	public Computer(){
		
	}
	public Computer(int number){
		this.number=number;
	}//構造方法重載;
	
	public int getNumber(){
		return number;
	}//獲取編號
	public boolean isUsed(){
		return used;
	}//查看狀態;
	
		
	
	public void beOpen(){
		used=true;
		System.out.println(number+"號電腦,開機成功");
	}
	public void beUsing(){
		System.out.println(number+"號電腦,正在被使用");
		
	}
	public void beClose(){
		used=false;
		System.out.println(number+"號電腦,關機成功");
	}
	
}

  

package student;
public class MachineRoom{
	public Computer[] cc=new Computer[5];//電腦數組
	{
		for(int i=0;i<cc.length;i++){
			cc[i]=new Computer(i+1);
		}
	}//代碼塊,給每台電腦編號//12345
	public void welcomeStudent(Student aa){
		String bb=aa.getName();//獲取學生名字
		System.out.println(bb+"學生歡迎您來機房");
		//學生找一台關閉的電腦	
		for(int i=0;i<cc.length;i++){
				System.out.println("==="+cc[i].isUsed()+"===");
				if(!(cc[i].isUsed())){ //false,
					
					aa.useComputer(cc[i]);//
					break;					
				}
		}//思考,每台電腦的開機/關機,保存在哪里?這個開機/關機,是Computer類屬性;每台電腦默認是false;當調用weblcomStudent方法時,可能被修改;然后存儲在Computer引用類型的cc[i]變量中;
	}
}

  

package student;
public class Student{
	private String name;//名字
	private int RP=(int)(Math.random()*10);
	public Student(){};
	public Student(String name){
		this.name=name;
	}//構造方法重載;
	public String getName(){
		return name;
	}//獲取名字
	public void useComputer(Computer aa){
		System.out.println(name+"學生開始使用電腦啦");
		aa.beOpen();
		aa.beUsing();
		if(this.RP<5){
			System.out.println(name+":人品極差,不關電腦");
		}else{
			aa.beClose();
		}
		
	}//學生使用電腦
}

  

package student;
public class Test{
	public static void main(String[] args){
		MachineRoom x=new MachineRoom();
		String[] name={"春天","夏天","秋天","冬天","夏雨天"};
		for(int i=0;i<name.length;i++){			
			Student y=new Student(name[i]);//春天
			x.welcomeStudent(y);
		}
		
		
		
	}
}

  

 

 

 

 

 

 

package velometer;
public class Car{
	private int speed;//小車速度
	public Car(){
	}
	public Car(int speed){
		this.speed=speed;
	}//構造方法重載;
	public int getCarSpeed(){
		return speed;
	}//獲取小車速度;
}

  

package velometer;
public class PoliceCar{
	private int speed;//警車速度
	public PoliceCar(){}
	public PoliceCar(int speed){
		this.speed=speed;
	}//構造方法重載;
	public void chase(Car a){ //傳參,參數為Car類型
		int carspeed=a.getCarSpeed();//可直接獲取,不用創建對象;//獲取小車速度;
		if(speed>carspeed){
			int time=100/(speed-carspeed);
			System.out.println(time+"s后警車追上小汽車");
		}else{
			System.out.println("小汽車跑太快了,追不上");
		}
	}//追車;
}

  

package velometer;
public class Velometer{
	public int stime;//標准時間
	public Velometer(){}
	public Velometer(int time){
		stime=time;
	}//構造方法重載;
	
	public void isChase(Car x){
		int carspeed=x.getCarSpeed();//獲取小車速度
		if((100/carspeed)<stime){
			PoliceCar y=new PoliceCar(40);
			y.chase(x);
		}else{
			System.out.println("未超速");
		}
		
	}//判斷是否超速,是否追車;
}

  

package velometer;
public class Test{
	public static void main(String[] args){
		Car a=new Car(80);	
		Velometer b=new Velometer(5);
		b.isChase(a);
		
	}
}

  

 

 

 

 

 

    

 

  

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM