日期:2014-05-20 浏览次数:21150 次
class Box{
private Fruit fruit;
private List<Fruit> fruitList = new ArrayList<Fruit>();
Box(Fruit fruit){
this.fruit = fruit;
}
public void addFruit(Fruit fruit){}
public void getFruit(Fruit fruit){}
public String showFruit(Fruit fruit){return fruit.getColor() + fruit.getWeight();}
}
class Fruit{
private String color;
private double weight;
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
}
------解决方案--------------------
呵呵 楼主我改下代码,这样的话你更方便了,你如果想要添加一种水果比如桃子的话,你要改的代码很少,就只要继承Fruit类然后new一个桃子就OK了其他代码都不用动,程序会自动帮你识别重量,颜色以及名字的
package com.djk.celue;
import java.lang.reflect.Field;
import java.util.ArrayList;
/**
* 水果接口
* @author Administrator
*
*/
abstract class Fruit
{
private StringBuffer sb = new StringBuffer();
public String toString()
{
//水果的重量
String weigth = null;
//水果的颜色
String color = null;
//水果的全称包括包名字
String name =null;
//水果的英语名字
String fruitname = null;
try {
name = this.getClass().getName();
//如果name包括包名的话
if(name.lastIndexOf(".")!=-1)
{
fruitname = name.substring(name.lastIndexOf(".")+1,name.length());
}
else
{
fruitname = name;
}
//利用反射拿到fruit的私有属性
Field field1 = this.getClass().getDeclaredField("weight");
field1.setAccessible(true);
Field field2 = this.getClass().getDeclaredField("color");
field2.setAccessible(true);
//得到重量
weigth = (String)field1.get(this);
//得到颜色
color = (String)field2.get(this);
}
catch (Exception e)
{
System.out.println("error");
}
return sb.append("这个").append(fruitname).append("的颜色是").append(color).append("重量是:").append(weigth).toString();
}
}
/**
* 苹果
* @author Administrator
*
*/
class Apple extends Fruit
{
/**
* 重量
*/
private String weight;
/**
* 颜色
*/
private String color;
public Apple(String weight,String color)
{
this.weight = weight;
this.color = color;
}
public String getWeight() {
return weight;
}
public void setWeight(String weight) {
this.weight = weight;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
/**
* 橘子
* @author Administrator
*
*/
class Orange extends Fruit
{
/**
* 重量
*/
private String weight;
/**
* 颜色
*/
private String color;
public Orange(String weight,String color)
{
this.weight = weight;
this.color = color;
}
public String getWeight() {
return weight;
}
public void setWeight(String weight) {
this.weight = weight;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
/**
* 梨
* @author Administrator
*
*/
class Pear extends Fruit
{
/**
* 重量
*/
private String weight;
/**
* 颜色
*/
private String color;
public Pear(String weight,String color)
{
this.weight = weight;
this.color = color;
}
public String getWeight() {
return weight;
}
public void setWeight(String weight) {
this.weight = weight;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
/**
* 水果箱子
* @author Administrator
*
*/
class FruitBox
{
//集合用来装水果的
private ArrayList<Fruit> fruitList = new ArrayList<Fruit>();
//用来放水果
public FruitBox addFruit(Fruit fruit)
{
return fruitList.add(fruit)?this:null;
}
//用来取水果的集合
public ArrayList<Fruit> getFruit()
{
if(fruitList.isEmpty())
{
return null;
}
return fruitList;
}
}
/**
*测试类
* @author Administrator
*
*/
public class FruitTest
{
public static void main(String[] args)
{
//水果箱子
FruitBox fruitBox = new FruitBox();
//苹果
Fruit a = new Apple("23", "红色");
//苹果
Fruit d = new Apple("29", "青色");
//橘子
Fruit b = new Orange("24","黄色");
//梨
Fruit c = new Pear("28","黄色");
//把水果都放入箱子中
fruitBox.addFruit(a).addFruit(d).addFruit(b).addFruit(c);
//把箱子中的水果拿出来
ArrayList<Fruit> fruitList = fruitBox.getFruit();
for(Fruit fruit :fruitList)
{
System.out.println(fruit);
}
}
}