我怎么感觉抽象类没有点用处啊,花拳绣腿一样!我那段代码来说说
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去掉,直接在类里面直接说明,多好啊!多省事啊!加上那么多代码不是自找麻烦吗?有没有大人为我解释一下这个问题啊?
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去掉,直接在类里面直接说明,多好啊!多省事啊!加上那么多代码不是自找麻烦吗?有没有大人为我解释一下这个问题啊?
存在Shape这个抽象类最大的好处就是,所有继承自Shape的子类都会有共同的一些协议,而这些协议则是进行多态转换的必要条件,而且这些共同的继承自Shape还可以保证泛型约束的时候有意义。
最大的好处应该是有这个Shape类规范之后,代码的维护量明显会减少,这个是你不长期维护代码体会不到的。
Cirle c = new Circle().dispaly();但是当你需要更改的时候,比如你不需要显示圆的图案了,想要显示三角形的图案,你就得这样更改
Rectangle rect = new Rectangle().display();要是下面还弄了很多对该图形的操作,你修改起来就累死了。
所以你可以这样写:
Shape shape = new Circle().display();当你需要换一个图形的时候,直接修改后面的就可以了。
就像你使用集合的时候,假如你使用Arraylist的时候,往往List list = new Arraylist();当你发现你的项目使用Linklist的时候更适合,你直接把Arraylist修改为Linklist就完事了,不是很方便吗
举一个简单的例子吧:
假如你需要定义学生,老师,工人,医生等一系列的类(有100个),同时又要获取这些类共同的特征,如姓名,年龄等,你会为每一个类写一个setName(String name)方法,还是写一个抽象类Person,在这个类中定义setName(String name)方法,让它的子类去继承它?