A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 孙百鑫 于 2013-6-17 20:49 编辑

这有两段代码 ,都可以实现,运行结果都为12   over,你觉得哪段代

  1. <P>/*
  2. 有一个圆形和长方形。
  3. 都 可以获取面积。对于面积如果出现非法的数值,视为是获取面积出现问题。
  4. 问题通过异常来表示。
  5. 先要对这个程序进行基本设计。
  6. */</P>
  7. <P>interface Shape
  8. {
  9.        public void getArea(int length, int width);
  10. }
  11. /*
  12. 随便试问如果改成以下类的方式,乐不乐观?如果不乐观,那么它又有什么局限性?</P>
  13. <P>class Shape
  14. {
  15.        public void getArea(int length, int width)
  16.        {</P>
  17. <P>       }
  18. }
  19. */
  20. class Rec implements/*宝义成class类后改成extends*/ Shape
  21. {
  22.        private int length,width;
  23.        public void getArea(int length, int width)
  24.       {
  25.               this.length = length;
  26.               this.width = width;
  27.               System.out.println(length*width);
  28.       }
  29. }

  30. class ExceptionTest2
  31. {
  32.         public static void main(String[] args)
  33.        {
  34.               Rec a = new Rec();
  35.               a.getArea(3,4);

  36.               System.out.println("over");
  37.         }
  38. }

  39. /****************************************************************/
  40. interface Shape
  41. {
  42.        public void getArea();
  43. }

  44. class Rec implements Shape
  45. {
  46.        private int length,width;
  47.        Rec(int length, int width)
  48.       {
  49.               this.length = length;
  50.               this.width = width;
  51.       }
  52.        public void getArea()
  53.       {
  54.               System.out.println(length*width);
  55.       }
  56. }

  57. class ExceptionTest3
  58. {
  59.        public static void main(String[] args)
  60.       {
  61.               Rec a = new Rec(3,4);
  62.               a.getArea();

  63.               System.out.println("over");
  64.       }
  65. }
  66. </P>
复制代码
码会更好些,为什么?那么另一段代码有什么局限性(比如内存分配等)?希望大神们能详细回答》

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 神马都是浮云

查看全部评分

3 个回复

倒序浏览
貌似有点乱码?但应该不影响大伙阅读代码,问题是第一行跳到最后一行了,失误了。。
回复 使用道具 举报
先回答你的第一个问题:
将接口改成类后在你的程序中没什么本质区别,但是如果换做实现开发中应该以接口定义shape,因为shape从名字上看就是一个抽象的东西。形状是啥?多了去了,圆方三角都是。没有具体的指定和描述,仅仅只是一个名词不能出现对应的具体事物 ,那么就不应该出现对应的对象,interface是无法产生对象的,专门为表现抽象事物。比如你要定义一个水果的对象,水果是什么?是苹果还是香蕉,种类太多,具体对象不明确,没办法产生实质对象,所以水果只能是一个抽象的接口,不能是一个类。另外从内存上来看,一个class皆派生自Object,所以自然的一个class在内存中占用的除了本身外还有Object的一些方法和属性,而interface没有这些多余的东西,显然占用内存比较少。
  总结一共两点意见给你参考 1当条件不足以清楚的描述出一件具体的事物时那么使用抽象,2如果可以的话,尽可能将基类定为抽象以节约内存占用。



  再说你的第二个问题,你的两种方式没啥太大的区别。只不过是一个使用单个函数完成功能,一个分成了两个函数完成。这在内存分配上没区别,程序要考虑的内存占用仅限于数据与对象,对于方法体来说不须要考虑太多,因为方法体是存放在程序代码区中的。一个方法体仅以字节计算,占用是非常小的,而且程序代码区的内存占用不会对系统造成太大影响。程序员只需要考虑的是堆栈内存。
  所以 你以上两个都可以,但是从设计角度来说建议你使用第二种,因为一个具体的形状产生后应该有他自己对应的大小,如果所有边长都为0的形状那不是空气吗。就是空气都能分解出原子,在显微镜下还有大小呢。你第一种方式出来建一个没指定任何边长的形状出来,这非常违反自然法则。

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1

查看全部评分

回复 使用道具 举报 1 0
slatop@qq.com 发表于 2013-6-16 02:22
先回答你的第一个问题:
将接口改成类后在你的程序中没什么本质区别,但是如果换做实现开发中应该以接口定 ...

太感谢哥们你了,谢谢,解释得非常详细,解决我不少的疑问。。。。支持黑马!学员很给力啊!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马