黑马程序员技术交流社区
标题:
代码是否精炼的问题,希望大神们多发表一下自己的见解!
[打印本页]
作者:
刘利民
时间:
2013-6-16 00:08
标题:
代码是否精炼的问题,希望大神们多发表一下自己的见解!
本帖最后由 孙百鑫 于 2013-6-17 20:49 编辑
这有两段代码 ,都可以实现,运行结果都为12 over,你觉得哪段代
<P>/*
有一个圆形和长方形。
都 可以获取面积。对于面积如果出现非法的数值,视为是获取面积出现问题。
问题通过异常来表示。
先要对这个程序进行基本设计。
*/</P>
<P>interface Shape
{
public void getArea(int length, int width);
}
/*
随便试问如果改成以下类的方式,乐不乐观?如果不乐观,那么它又有什么局限性?</P>
<P>class Shape
{
public void getArea(int length, int width)
{</P>
<P> }
}
*/
class Rec implements/*宝义成class类后改成extends*/ Shape
{
private int length,width;
public void getArea(int length, int width)
{
this.length = length;
this.width = width;
System.out.println(length*width);
}
}
class ExceptionTest2
{
public static void main(String[] args)
{
Rec a = new Rec();
a.getArea(3,4);
System.out.println("over");
}
}
/****************************************************************/
interface Shape
{
public void getArea();
}
class Rec implements Shape
{
private int length,width;
Rec(int length, int width)
{
this.length = length;
this.width = width;
}
public void getArea()
{
System.out.println(length*width);
}
}
class ExceptionTest3
{
public static void main(String[] args)
{
Rec a = new Rec(3,4);
a.getArea();
System.out.println("over");
}
}
</P>
复制代码
码会更好些,为什么?那么另一段代码有什么局限性(比如内存分配等)?希望大神们能详细回答》
作者:
刘利民
时间:
2013-6-16 00:11
貌似有点乱码?但应该不影响大伙阅读代码,问题是第一行跳到最后一行了,失误了。。
作者:
slatop@qq.com
时间:
2013-6-16 02:22
先回答你的第一个问题:
将接口改成类后在你的程序中没什么本质区别,但是如果换做实现开发中应该以接口定义shape,因为shape从名字上看就是一个抽象的东西。形状是啥?多了去了,圆方三角都是。没有具体的指定和描述,仅仅只是一个名词不能出现对应的具体事物 ,那么就不应该出现对应的对象,interface是无法产生对象的,专门为表现抽象事物。比如你要定义一个水果的对象,水果是什么?是苹果还是香蕉,种类太多,具体对象不明确,没办法产生实质对象,所以水果只能是一个抽象的接口,不能是一个类。另外从内存上来看,一个class皆派生自Object,所以自然的一个class在内存中占用的除了本身外还有Object的一些方法和属性,而interface没有这些多余的东西,显然占用内存比较少。
总结一共两点意见给你参考 1当条件不足以清楚的描述出一件具体的事物时那么使用抽象,2如果可以的话,尽可能将基类定为抽象以节约内存占用。
再说你的第二个问题,你的两种方式没啥太大的区别。只不过是一个使用单个函数完成功能,一个分成了两个函数完成。这在内存分配上没区别,程序要考虑的内存占用仅限于数据与对象,对于方法体来说不须要考虑太多,因为方法体是存放在程序代码区中的。一个方法体仅以字节计算,占用是非常小的,而且程序代码区的内存占用不会对系统造成太大影响。程序员只需要考虑的是堆栈内存。
所以 你以上两个都可以,但是从设计角度来说建议你使用第二种,因为一个具体的形状产生后应该有他自己对应的大小,如果所有边长都为0的形状那不是空气吗。就是空气都能分解出原子,在显微镜下还有大小呢。你第一种方式出来建一个没指定任何边长的形状出来,这非常违反自然法则。
作者:
刘利民
时间:
2013-6-16 13:48
slatop@qq.com 发表于 2013-6-16 02:22
先回答你的第一个问题:
将接口改成类后在你的程序中没什么本质区别,但是如果换做实现开发中应该以接口定 ...
太感谢哥们你了,谢谢,解释得非常详细,解决我不少的疑问。。。。支持黑马!学员很给力啊!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2