黑马程序员技术交流社区

标题: 多态与接口相结合 [打印本页]

作者: 张yy    时间: 2013-7-17 05:45
标题: 多态与接口相结合
现在以四边形类为例来实现多态与接口的结合应用(求改进)
例:
  1. interface drawTest{  //定义接口
  2.     public void draw(); //定义方法
  3.         }

  4. //定义平行四边形类,继承与四方形类,并且实现drawTest接口
  5. class Parallelogram extends Quadrangle implements drawTest{
  6.     public void draw(){    //覆盖接口方法
  7.         System.out.print("平行四边形.draw()");
  8.     }
  9. }

  10. //定义平正方形类,继承与四方形类,并且实现drawTest接口
  11. class Square extends Quadrangle implements drawTest{
  12.     public void draw(){    //覆盖接口方法
  13.         System.out.print("正方形.draw()");
  14.     }
  15. }


  16. public class Quadrangle {  //定义四边形类

  17.         /**
  18.          * @param args
  19.          */
  20.         public void print(Quadrangle q){
  21.             System.out.println("该图形是四边形的其中一种");
  22.         }
  23.         
  24.         public static void main(String[] args) {
  25.         Quadrangle q = new Quadrangle();
  26.         Parallelogram p = new Parallelogram();
  27.         Square s = new Square();
  28.         p.draw();     //接口应用
  29.         q.print(p);    //多态应用
  30.         s.draw();   //接口应用
  31.         q.print(s);    //多态应用
  32.         }

  33. }
复制代码
运行结果:
平行四边形.draw()该图形是四边形的其中一种
正方形.draw()该图形是四边形的其中一种


现在感觉main函数里面过于臃肿,请问该如何改进


作者: 薛淑凯    时间: 2013-7-17 09:48
原因就在你这个接口完全就没有存在的必要,没有起到一点作用,把你搞晕了。只需要继承就搞定了,何必要定义接口呢
  1. //定义平行四边形类,继承与四方形类,并且实现drawTest接口
  2. class Parallelogram extends Quadrangle{
  3.     public void draw(){    //覆盖接口方法
  4.         System.out.print("平行四边形.draw()");
  5.     }
  6. }

  7. //定义平正方形类,继承与四方形类,并且实现drawTest接口
  8. class Square extends Quadrangle{
  9.     public void draw(){    //覆盖接口方法
  10.         System.out.print("正方形.draw()");
  11.     }
  12. }

  13. public class Quadrangle {  //定义四边形类
  14.         public void draw(){}
  15.     public static void print(Quadrangle q){
  16.         q.draw();
  17.         System.out.println("该图形是四边形的其中一种");   
  18.     }
  19.     public static void main(String[] args) {
  20.         print(new Parallelogram());
  21.         print(new Square());
  22.     }
  23. }
复制代码

作者: Candy    时间: 2013-7-17 11:16
楼上的,为什么总枪不到,黑马的回答个问题都这么难,分啊。{:soso_e118:}
作者: 张yy    时间: 2013-7-17 11:40
本帖最后由 张yy 于 2013-7-17 12:00 编辑
薛淑凯 发表于 2013-7-17 09:48
原因就在你这个接口完全就没有存在的必要,没有起到一点作用,把你搞晕了。只需要继承就搞定了,何必要定义 ...

呵呵,二楼的帅哥,貌似你没看清楚我的标题,“多态与接口的结合”,请注意“结合”二字,这里讨论的是一种形式,而不是具体的功能,接口的定义是约束一种标准,继承该接口的类都要去实现该接口中的抽象方法,现在你觉得这个接口还没有存在的必要?

作者: 薛淑凯    时间: 2013-7-17 17:43
张yy 发表于 2013-7-17 11:40
呵呵,二楼的帅哥,貌似你没看清楚我的标题,“多态与接口的结合”,请注意“结合”二字,这里讨论的是一 ...

哦,,按你的意思的话,这个例子二者完全没有结合的意思,最让人郁闷的是Quadrangle类中的那个方法,用这种形式体现多态不是很好看。何不来个接口引用指向子类对象呢,这种结合不是很好吗?还有我觉得这两者结合的最好的形式就是工厂方法了,仅代表个人看法,欢迎讨论
        drawTest d=new Square();
        d.draw();
作者: 张yy    时间: 2013-7-18 18:21
好吧,那请给个NICE的接口引用指向子类对象和工厂方法的例子,求实例代码。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2