java编程中,抽象类有什么作用?我看书上也是可有可没有。

我是说我去掉不继承的抽象类的那个方法,程序照样能通过编译。例如:我不想继承location,在继承类里我不写出abstract String getlocation(),程序也能通过编译。

书上这么说的吗?那你不要看这本书了。
可有可没有的东西怎么会存在缜密的语言中呢?
如果你是初学者很可能搞不清楚抽象的概念,但是不代表它就没有用。
--------------------------------------------------------------------------
首先我想问问你你怎么写程序的?比如说写稍微复杂一点的程序?如果你没写过稍微复杂一点的程序那就不要管这个抽象类了;写过的话你是不是想到一个方法写一个方法?是不是没用到过继承?如果是这样的话你当然会觉得没必要用到抽象类,因为你完全没有从面向对象的角度设计程序。
根据面向对象自顶向下的思路,你要先搭好程序架子,也就是说你要预先想好有哪些类,有哪些方法,然后逐一实现。所以设计阶段和实现阶段是分开的。
在初步实现的时候有一些简单通用的方法可以写出来了,但是难免会遇到一个方法在不同类下面需要写成不同形式的情况,于是你就要用到抽象类。在抽象类里,有的方法可以实现,有的方法可以不实现,留给继承它们的子类去实现。但是方法没实现归没实现,设计反正已经设计在那里了,它迟早要被实现的,因为这是语言规定。
我给你举个用抽象类的例子:
--------------------------------------------------------
使用抽象类:
abstract class Translation { //这是一个抽象类。
protected String str;
public Translate (String str) {
this.str = str;
}
public String getSource () {
return str;
}
public abstract String getTranslation (); //此时无法实现此方法,把它定义为抽象。
}
class EnglishChineseTranslation extends Translation {
@Override public String getTranslation () { //只需要实现这个方法。
if (str.equalsIgnoreCase("apple"))
return "苹果";
return null;
}
}
class ChineseEnglishTranslation extends Translation {
@Override public String getTranslation () { //用另外的方式实现这个方法。
if (str.equalsIgnoreCase("苹果"))
return "apple";
return null;
}
}
=================================================================
我写了很多,但是貌似你并没有理解我的意思。
用我们老师的话说,不是只要能编译通过的程序都是好的,都是对的。如果你写一个程序只追求编译通过,,那是一件无聊且无意义的事情。
一个程序要从多方面来评价:
1、是不是做了它应该做的事情;
2、开发、部署、维护的效率如何;
3、执行的效率如何;
4、用户接口是否友好,或者结果的可读性是否足够强;
5、设计思想好不好,结构是否清晰;
6、文档写得是否清晰具体?
至少有以上这些因素,能不能通过编译只能说明你的程序语法有没有问题,能通过编译的程序多的去了,用你的理论,我把所有的整数都定义成 long,照样可以编译通过,那我为什么还要 int、short、byte 这些类型呢?你没用到过的特性就是可有可无吗?你确定你以后不会用到吗?一个程序只有一种写法吗?你确定你去掉 abstract 的写法是最好的吗?
=================================================================
这样你能明白了不?
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-01-02
具体的好处我没记过,我就先说一个,就好比你要
实现一个接口,但是这个接口的方法比较多,而你只需要用到一个方法,但是因为集成的是接口,所以你不得不是先接口中所有的方法!!就很麻烦,产生很多不必要的代码!
如果继承接口,而创建一个抽象类,然后你在继承抽象类,那么久只需要复写你所需要的那一个方法就行了!本回答被网友采纳
第2个回答  2011-01-02
现在不明白 以后你会明白的!特别是团队开发大型程序的时候!
相似回答