我怎么感觉抽象类没有点用处啊,花拳绣腿一样!我那段代码来说说
abstract class Shape
{
public abstract double area();
}class Circle extends Shape
{
double r;
Circle(double r)
{
this.r =r;
}
public double area()
{
return (Math.PI*r*r);
}
}class LadderShaped extends Shape
{
double a,b,h;
LadderShaped(double a,double b,double h)
{
this.a =a;
this.b =b;
this.h =h;
}
public double area()
{
return (a+b)*h/2;
}
}public class AbstractShape
{
public static void main(String args[])
{
Shape c = new Circle(2.0); 
Shape d = new LadderShaped(2.0,7.0,10);
System.out.println("圆"+c.area());
System.out.println("梯形形"+d.area());

}
}
我直接去掉Shape这个类,直接把继承extends去掉,直接在类里面直接说明,多好啊!多省事啊!加上那么多代码不是自找麻烦吗?有没有大人为我解释一下这个问题啊?

解决方案 »

  1.   

    只能说明你还没有体会到传说当中的“多态”以及面向接口的编程。
    存在Shape这个抽象类最大的好处就是,所有继承自Shape的子类都会有共同的一些协议,而这些协议则是进行多态转换的必要条件,而且这些共同的继承自Shape还可以保证泛型约束的时候有意义。
    最大的好处应该是有这个Shape类规范之后,代码的维护量明显会减少,这个是你不长期维护代码体会不到的。
      

  2.   

    你写个接口,别人怎么实现是别人的事,要是你非要别人用你的某个方法,写一个抽象类,写一个方法,加上final,ok,别人不得不用你的方法
      

  3.   

    就用你上面的代码举个例子吧比如你要显示圆的图案,应该调用它的方法:
    Cirle c = new Circle().dispaly();但是当你需要更改的时候,比如你不需要显示圆的图案了,想要显示三角形的图案,你就得这样更改
    Rectangle rect = new Rectangle().display();要是下面还弄了很多对该图形的操作,你修改起来就累死了。
    所以你可以这样写:
    Shape shape = new Circle().display();当你需要换一个图形的时候,直接修改后面的就可以了。
    就像你使用集合的时候,假如你使用Arraylist的时候,往往List list = new Arraylist();当你发现你的项目使用Linklist的时候更适合,你直接把Arraylist修改为Linklist就完事了,不是很方便吗
      

  4.   

    。上面的代码写错了= =。应该是Shape   shape   =   new   Circle();shape.display();
      

  5.   

    百度 搜索“java抽象类优点”
      

  6.   

    你如果在其他地方调用shape的子类的,可以直接声明shape类型变量,这样你再添加shape类的子类就不用那么大的工作量了直接exstends就OK了
      

  7.   

    抽象类提供统一的借口,大家可以继承之,然后在子类中去实现各自的功能,在设计模式,或者Java的Api中得到了广泛的应用,你学到后面就知道这种概念的好处了。
      

  8.   

    比如你给的例子,以后需要对每个图形增加,get/setColor方法,只需要在抽象类中加入即可,继承他的类不需要任何改变。但是如果没有抽象类,你需要在每个图形中加入get/setColor,如果有100个图形,那代码量就很大了。
      

  9.   

    LZ需要知道使用抽象类的好处。
    举一个简单的例子吧:
    假如你需要定义学生,老师,工人,医生等一系列的类(有100个),同时又要获取这些类共同的特征,如姓名,年龄等,你会为每一个类写一个setName(String name)方法,还是写一个抽象类Person,在这个类中定义setName(String name)方法,让它的子类去继承它?