需求:把不同的农产品放入农产品数组中,遍历所有农产品,展示不同的信息
参考步骤:
1.创建FarmProduce类,声明私有库存stock属性,提供公共getter/setter方法
2.创建Show接口,声明抽象方法show()
3.分别创建小麦Wheat,玉米Corn,大豆Soybean类,继承FarmProduce类并实现Show接口,实现抽象方法
4.创建5个不同产品对象,存入Show类型数组中
5.遍历数组,调用每个元素的show方法展示不同信息
运行截图:
代码部分:
FarmTest 类:
import java.lang.reflect.Method;
import java.util.Set;
public class FarmTest {
public static void main(String[] args) {
Show corn = createCrop(Corn.class, 10000);
Show soy1 = createCrop(Soybean.class, 20000);
Show soy2 = createCrop(Soybean.class, 30000);
Show wh1 = createCrop(Wheat.class, 20000);
Show wh2 = createCrop(Wheat.class, 50000);
Set<Show> shows = Set.of(corn, soy1, soy2, wh1, wh2);
for (Show show : shows) {
show.show();
}
}
private static Show createCrop(Class<? extends Show> cropClass, int stock) {
try {
Show crop = cropClass.getDeclaredConstructor().newInstance();
Method setStockMethod = crop.getClass().getMethod("setStock", int.class);
setStockMethod.invoke(crop, stock);
return crop;
} catch (Exception e) {
throw new RuntimeException("创建失败", e);
}
}
}
class FarmProduce {
private int stock;
public FarmProduce() {
}
public FarmProduce(int stock) {
this.stock = stock;
}
public int getStock() {
return stock;
}
public void setStock(int stock) {
this.stock = stock;
}
}
class Corn extends FarmProduce implements Show{
@Override
public void show() {
System.out.println("我是玉米!!!库存还有"+getStock()+"斤");
}
}
class Soybean extends FarmProduce implements Show{
@Override
public void show() {
System.out.println("我是大豆!!!库存还有"+getStock()+"斤");
}
}
class Wheat extends FarmProduce implements Show{
@Override
public void show() {
System.out.println("我是小麦!!!库存还有"+getStock()+"斤");
}
}
Show接口:
public interface Show {
void show();
}