package 原始社会class 石头{
   
}
class 石刀 extends 石头{
}class 石头的作用 extends 石头{
   石刀 石头变石刀(){}
   void 相砸(){}
   void 相摔(){}
   void 相磨(){}
   
}
class 石刀的作用 extends 石刀{
   void 去砍木头(){};
   void 去砍椅子(){}
}class 木头{
}
class 椅子 extends{
}
class 木头的变化 extends 木头{
}
class 椅子的变化 extends 椅子{
}不知道这样子好不好哎,我平时都这么做的。。其实这样的面试题出的太好了。。比我当时考什么抽象类和接口有什么区别纯理论的好多了。

解决方案 »

  1.   

    : totodo(是时候了,小土豆仙)回答的大体可以.但最好能有个总的object类,再建几个什么石头的接口.木头的接口.扩展性就更好了.要记住:接口是扩展的关键.或抽象是扩展的关键
      

  2.   

    package 原始社会abstract class 抽象石头{abstract 石刀 相砸(石头){}
    abstract 石刀 相摔(石头){}
    abstract 石刀 相磨(石头){}
       
    }
    abstract class 抽象石刀{abstract 木材 砍(椅子){}
    abstract 木头 砍(木头){}
       
    }class 木头{
    }
    class 椅子{
      public 椅子 (木材....);
    }
    class 木材{
    }class 石头 extends 抽象石头{
     石刀 相砸(石头){...}
     石刀 相摔(石头){...}
     石刀 相磨(石头){...}
    }class 石刀 extends 抽象石刀{ 木材 砍(椅子){...}
     木头 砍(木头){...}
       
    }
    main() {
    石头 石头1 = new 石头();
    石头 石头2 = new 石头();
    木头 木头1 = new 木头();
    木材 木材1 = new 木材();
    椅子 椅子1 = new 椅子();
    石刀 石刀1 = 石头1.相砸(石头2);
    //石刀 石刀1 = 石头1.相摔(石头2);
    //石刀 石刀1 = 石头1.相磨(石头2);
    木材1 = 石刀1.砍(木头1);
    椅子1 = new 椅子(木材1);
    //生成椅子
      

  3.   

    to: znjq1001(追风) 
    如果我要增加一种物体如:泥土或别的什么.然后规定所以的物体要有重量的属性.你的改动就大了.不过比totodo(是时候了,小土豆仙)要好.
      

  4.   

    to AllError 
    可以增加一个借口,把属性放到里面,
      

  5.   

    我比较赞成nullhue(dream.vision.realiz)说的
    先分析角色(包括属性和方法)
    再考虑各种角色间的关系
    最后抽象出接口,不知这样可行?
      

  6.   

    totodo(是时候了,小土豆仙) 和 znjq1001(追风)的设计好像都没对木头,木材,椅子之间的关系作处理,其实可以
     木材 extend 木头,
    椅子 extend 木材,然后有
    木材 石刀.砍(木头);就行了,不用再来个 石刀.砍(椅子)的了另外对 totodo(是时候了,小土豆仙)的设计:class 石头的作用 extends 石头{
       石刀 石头变石刀(){}
       void 相砸(){}
       void 相摔(){}
       void 相磨(){}
       
    }
    class 石刀的作用 extends 石刀{
       void 去砍木头(){};
       void 去砍椅子(){}
    }
    把石头,石刀的作用单独作为一个类不解。
      

  7.   

    唉...我开始也想到用接口,可是因为一开始他并没有说1,2,3条,也就是说他补充1,2,3条是在我按照跟"totodo(是时候了,小土豆仙)"差不多的方式叙述后,他再补充的,我当时就有点昏,忘了用接口再更改一次...惨...楼下的朋友再给更好的建议哦.....
      

  8.   

    class 石头 {
    };
    interface 石头作用的结果;
    interface 石头的作用 {
      石头作用的结果 act(石头,石头);
    };
    class 石头互磨 implements 石头的作用 {
      石头作用的结果 act(石头,石头) { return 石刀; }
    };
    class 石刀 implements 石头作用的结果 {
      木材 砍(木头);
    };
    class 椅子;
    class 椅子制造者 {
      椅子 build(木材);
    };以后的扩展性:
    1。对于两块石头的其他的关系,可以通过扩展“石头的作用”接口
    2。对于作用可能的结果,可以通过实现“石头作用的结果”接口来实现
    3。其他的事物和石头就没有什么关系了,包括椅子什么的,可以按照需要来设计
      

  9.   

    当然,如果认为石头作用出来的结果都能够对一类东西执行“砍”的操作,可以在定义两个接口:
    interface 可以被砍的东西;
    interface 被砍的结果;然后在“石头作用的结果”接口中增加如下的方法:
    被砍的结果 砍(可以被砍的东西)
      

  10.   

    是啊,不用INTERFACE体现不出JAVA的特点,
    都用继承不是最佳的重用方式