java多型例項
阿新 • • 發佈:2018-12-20
public class Test { /* * 開發一個食物類Food,具體要求如下: 1.具有私有屬性:營養值,提供公有的get方法和保護的set方法。 2.有一個保護的無參的構造方法,在該方法內營養值由1-10之間的隨機數產生 3.包含一個公有的獲取食物名稱的方法 4.新增主方法測試 分別開發Food類的三個派生類:肉製品類、澱粉類和水果蔬菜類,要求: 1.這三個類均顯式編寫無參的構造方法,並分別對營養值乘以1.2 , 0.7 , 0.9 處理; 2.這三個類均重寫父類的獲取食物名稱的方法, 3.並測試。 開發一個猴子類Monkey,具體要求如下: 1.具有私有屬性:名稱,體重(直接賦初值10.0),兩者均提供公有的get方法。 2.僅有一個公有的有參構造方法:構造方法的引數為名稱 3.具有一個公有的,引數是Food型別,無返回值的eat(Food food)方法,其功能是吃食物( 在控制檯列印猴子名稱和食物名稱等資訊),同時體重會增加,體重增加量是:營養值*0.1 4.具有一個公有的,無參的,無返回值的game()方法,其功能是遊戲(可在控制檯列印資訊), 體重降低0.5,若體重在5以下不再下降。 5.重寫toString方法 6.新增主方法測試。 開發一個管理類,該類功能如下: 建立1個猴子,猴子進行100次吃食物和遊戲,具體每次吃食物還是遊戲是隨機的, 而且獲取食物也是隨機的可能是肉製品,水果蔬菜製品和澱粉製品。最後輸出這個猴子的名稱和體重。 注:可以根據需要自由設計該類。 * */ public static void main(String[] args) { Monkey m = new Monkey("齊天大聖"); Food food = null; for(int i=1;i<=100;i++){ int num = (int)(Math.random()*2+1); //當數字是1的時候,吃食物,2的時候玩遊戲 if(num==1){ int num1 = (int)(Math.random()*3+1); if(num1==1){ //肉 food = new Meat(); food.setName("紅燒肉"); m.eat(food); }else if(num1==2){//澱粉 food = new Starch(); food.setName("土豆"); m.eat(food); }else{//水果 food = new Fruit(); food.setName("香蕉 "); m.eat(food); } //吃食物資訊列印 System.out.print(m.getName()+"吃:"+food.getName()+"體重:"); System.out.printf("%.1f",m.getWeight()); System.out.println(); }else{ m.game(); //玩遊戲資訊列印 System.out.print(m.getName()+"玩遊戲體重:"); System.out.printf("%.1f",m.getWeight()); System.out.println(); } } } }
/* * 1.具有私有屬性:營養值,提供公有的get方法和保護的set方法。 2.有一個保護的無參的構造方法,在該方法內營養值由1-10之間的隨機數產生 3.包含一個公有的獲取食物名稱的方法 4.新增主方法測試 */ public class Food { private double cuilinarylValue; private String name; public Food(){ this.cuilinarylValue = Math.random()*9+1; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getCuilinarylValue() { return cuilinarylValue; } public void setCuilinarylValue(double cuilinarylValue) { this.cuilinarylValue = cuilinarylValue; } }
public class Fruit extends Food { private String name; public Fruit(){ this.setCuilinarylValue(super.getCuilinarylValue()*0.9); } //重寫父類的獲取食物的名稱方法 @Override public String getName() { return this.name; } public void setName(String name) { this.name = name; } }
/*
* 分別開發Food類的三個派生類:肉製品類、澱粉類和水果蔬菜類,要求:
1.這三個類均顯式編寫無參的構造方法,並分別對營養值乘以1.2 , 0.7 , 0.9 處理;
2.這三個類均重寫父類的獲取食物名稱的方法,
3.並測試。
*/
public class Meat extends Food {
private String name;
public Meat(){
super();
//肉類的營養值
this.setCuilinarylValue(super.getCuilinarylValue()*1.2);
}
public void setName(String name) {
this.name = name;
}
//重寫父類的獲取食物的名稱方法
@Override
public String getName() {
return this.name;
}
}
public class Starch extends Food {
/*
* /*
* 分別開發Food類的三個派生類:肉製品類、澱粉類和水果蔬菜類,要求:
1.這三個類均顯式編寫無參的構造方法,並分別對營養值乘以1.2 , 0.7 , 0.9 處理;
2.這三個類均重寫父類的獲取食物名稱的方法,
3.並測試。
*/
private String name;
public Starch(){
this.setCuilinarylValue(super.getCuilinarylValue()*0.7);
}
//重寫父類的獲取食物的名稱方法
@Override
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
public class Monkey {
/*
* 開發一個猴子類Monkey,具體要求如下:
1.具有私有屬性:名稱,體重(直接賦初值10.0),兩者均提供公有的get方法。
2.僅有一個公有的有參構造方法:構造方法的引數為名稱
3.具有一個公有的,引數是Food型別,無返回值的eat(Food food)方法,
其功能是吃食物(在控制檯列印猴子名稱和食物名稱等資訊),同時體重會增加,體重增加量是:營養值*0.1
4.具有一個公有的,無參的,無返回值的game()方法,其功能是遊戲(可在控制檯列印資訊),體重降低0.5,
若體重在5以下不再下降。
5.重寫toString方法
6.新增主方法測試。
*
*/
private String name;
private double weight = 10.0;
//引數傳遞Food型別 父類型別,方法那一頭,傳遞子類物件 ,多型的體現形式
public void eat(Food f){
this.weight+=f.getCuilinarylValue()*0.1;
//(在控制檯列印猴子名稱和食物名稱等資訊)
}
//具有一個公有的,無參的,無返回值的game()方法,其功能是遊戲(可在控制檯列印資訊),體重降低0.5,
若體重在5以下不再下降。
public void game(){
if(this.weight<5){
System.out.println("太虛弱了,該進食了!!");
return;
}
this.weight-=1;
}
public Monkey(String name){
this.name = name;
}
public String getName() {
return name;
}
public double getWeight() {
return weight;
}
}