抽象类有什么用?

lingfeng892 2012-06-30 07:54:47
感觉 Java 中的抽象类和 C++ 中的模板相似
但不知道抽象类有会用

下面这个感觉用不用抽象类都一样

/**如果把抽象类去掉也是正确的,那这个抽象类有什么用呢**/
abstract class Shape //抽象类
{
abstract double area(); //抽象方法
}
class Circles extends Shape //继承抽象类
{
double radius;
double area() //实现抽象类的方法
{
return 3.14 * radius * radius;
}
}
class Rectangles extends Shape //继承抽象类
{
double length;
double width;
public double area() //实现抽象类的方法
{
return length * width;
}
}
class Ladders extends Shape //继承抽象类
{
double length;
double width;
double height;
public double area() //实现抽象类的方法
{
return (length + width) * height / 2;
}
}

public class AbstractShapeDemo_4_22
{
public static void main(String[] args)
{
Circles c = new Circles();
c.radius = 2;
System.out.println(c.area());

Rectangles r = new Rectangles();
r.length = 4;
r.width = 3;
System.out.println(r.area());

Ladders l = new Ladders();
l.length = 4;
l.width = 3;
l.height = 2;
System.out.println(l.area());
}
}
...全文
307 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangxw000 2012-07-03
  • 打赏
  • 举报
回复
承上启下,基本共性用借口实现,部分共性用用抽象类实现基本共性接口,最后的具体特性用在子类中体现,参照JDK的很多类,如InputStram类的结构就能看出来。
阿冷 2012-07-02
  • 打赏
  • 举报
回复
如果简单地说,就是为了统一实现标准啊,也就是抽象类公开的方法,其他子类都要按它规定的来,写好了,很帅。
巽谷雨 2012-07-02
  • 打赏
  • 举报
回复
等你用到的时候自然就会想到他的作用,不过一般都用接口比较多
lingfeng892 2012-07-02
  • 打赏
  • 举报
回复
这里的抽象类好像没什么用啊,没有抽象类也正确,而且使用什么的都一样
未来纪元 2012-07-02
  • 打赏
  • 举报
回复
同样的方法,不同的实体类型,方法效果不一样
TinySun 2012-07-02
  • 打赏
  • 举报
回复
楼主还不知道多态真正的用处在哪儿。而只是知道形状与三角形、圆形是继承的关系而进行继承的。

而抽象类还有个好处,是可以防止你对抽象类(Shape)实例化,即你不能new Shape(),因为这是没有意义的。

推荐看《headfirst设计模式》,我对多态的理解就是从这开始的。
brightyq 2012-07-02
  • 打赏
  • 举报
回复
抽象类在多态机制中有用哦
还有一些工具的情况可以用使抽象类
楼主研究下设计模式,一些中间环节的类也可以写成抽象类,可起承上启下作用。

你的这个例子可以从意义上理解,一个shape是一个抽象的事物,而Circles ,Rectangles 圆,三角型是具体的形状。具体形态要有具体的属性与方法,而抽象的事物只需抽象的方法,待具体事物去实现它就可。
kakarot 2012-07-01
  • 打赏
  • 举报
回复
抽象类是为了屏蔽具体的实现
择思 2012-07-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

jdk1.8中接口可以有默认实现:

Java code

interface Queue {
Message read();
void delete(Message message);
void deleteAll() default {
Message message;
wh……
[/Quote]

原来如此。那请问实现该接口的类是一定要实现该接口声明的方法的,那么该默认实现有什么用呢?
龙四 2012-07-01
  • 打赏
  • 举报
回复
jdk1.8中接口可以有默认实现:


interface Queue {
Message read();
void delete(Message message);
void deleteAll() default {
Message message;
while ((message = read()) != null) {
delete(message);
}
}
}

[Quote=引用 5 楼 的回复:]

按照《Thinking in Java》的说法,抽象类是普通的类与接口之间的一种中庸之道。普通类提供的是一般意义的抽象(所有成员都有实现),而接口则提供完全的抽象(没有任何实现)。抽象类允许一部分方法提供实现。
如果类中的某个方法的实现需要由子类实现,只需要声明为抽象方法即可(相当于C++中的纯虚函数)。这时类也随之变为抽象类,但它较接口的优势在于可以定义一些方法的实现。另外,抽象类的字段也可……
[/Quote]
择思 2012-07-01
  • 打赏
  • 举报
回复
按照《Thinking in Java》的说法,抽象类是普通的类与接口之间的一种中庸之道。普通类提供的是一般意义的抽象(所有成员都有实现),而接口则提供完全的抽象(没有任何实现)。抽象类允许一部分方法提供实现。
如果类中的某个方法的实现需要由子类实现,只需要声明为抽象方法即可(相当于C++中的纯虚函数)。这时类也随之变为抽象类,但它较接口的优势在于可以定义一些方法的实现。另外,抽象类的字段也可以被子类使用,而接口中的字段都是static和final的。
以上为一点浅见。
yqw2010 2012-06-30
  • 打赏
  • 举报
回复
感觉楼上说的还是有点道理的,主要是用于多态的
conan23456 2012-06-30
  • 打赏
  • 举报
回复
你可以想想接口有什么作用
LucEaspe 2012-06-30
  • 打赏
  • 举报
回复
类是对某些可分类的实体的抽象,比如动物就可以是抽象类,然后猫、狗、猪....就是具体的类了,
抽象类中可以有数据成员和非抽象方法,抽象方面规定了方法签名,功能实现就由子类去实现了。。
LucEaspe 2012-06-30
  • 打赏
  • 举报
回复
多态机制中抽象类有着一定的地位。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧