A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 陌路行者 于 2013-7-4 14:00 编辑

如果抽象类中不定义抽象方法仅仅是为了不让其实例化么? 那么它的存在有意义么。

评分

参与人数 1黑马币 +3 收起 理由
杨兴庭 + 3

查看全部评分

18 个回复

倒序浏览
抽象类是给你的调用程序一个调用的接口,让你知道这个类有哪些方法是可以用的。
但是这些方法的实现可能有各种各样,这些具体的实现就在子类里定义。
简单的例子,一个动物的类,让你知道告诉你动物可以运动,而从动物类可以继承出猫阿,狗阿,好多的类,通过动物类这个基类你就可以控制猫狗等进行运动了。
如果抽象类里不定义抽象方法,那么这个抽象类就没有任何意义。就好像上帝是一切类的基类。你认为上帝有意义吗?

评分

参与人数 1黑马币 +3 收起 理由
杨兴庭 + 3

查看全部评分

回复 使用道具 举报
本身无法实例化,就不能被外界使用,增强了安全性。
回复 使用道具 举报
谢威 发表于 2013-7-3 09:41
抽象类是给你的调用程序一个调用的接口,让你知道这个类有哪些方法是可以用的。
但是这些方法的实现可能有 ...

那也就是说抽象类中必须得有抽象方法,可以这么理解么
回复 使用道具 举报
陌路行者 发表于 2013-7-3 09:54
那也就是说抽象类中必须得有抽象方法,可以这么理解么

也可以这么理解吧
回复 使用道具 举报
跟私有化某个类的构造函数一样吧,只告诉你一个类名字。thinking in java里有一句话
如果有一个类,让其包含任何abstract方法都显得没有实际意义,而且我们也想阻止产生这个类的任何对象,那么这时这样做就很有用了
这个在适配器类中有应用到,因为不知道子类需要多少方法哪种方法,所以就不声明方法名了,让子类自己看着办,需要啥写啥就行了。如果父类有方法声明就必须要实现那个方法,即便这个方法对我的子类是无用的

评分

参与人数 1黑马币 +2 收起 理由
杨兴庭 + 2

查看全部评分

回复 使用道具 举报
陌路行者 发表于 2013-7-3 09:54
那也就是说抽象类中必须得有抽象方法,可以这么理解么

抽象类中可以有抽象方法,也可以没有抽象方法,但是一个类中若是有一个抽象方法,这个类就必须用abstract修饰,
至于API中的抽象类内部没有抽象方法,咱也不知道sun公司是如何考虑的。

评分

参与人数 1黑马币 +3 收起 理由
杨兴庭 + 3

查看全部评分

回复 使用道具 举报
蚂蚁搬家 发表于 2013-7-3 10:41
抽象类中可以有抽象方法,也可以没有抽象方法,但是一个类中若是有一个抽象方法,这个类就必须用abstract ...

正是这一点不明白
回复 使用道具 举报
就是为了不让外界直接创建对象
回复 使用道具 举报
它还可以被子类继承,这样子类便具有这个抽象类的属性与方法,达到了代码重用的目的
回复 使用道具 举报
有意义的时候会有意义只是你现在还未遇到。有抽象方法的类一定是抽象类。但抽象类不一定有抽象方法。就是这样的。
回复 使用道具 举报
oxf974025918 发表于 2013-7-3 21:08
有意义的时候会有意义只是你现在还未遇到。有抽象方法的类一定是抽象类。但抽象类不一定有抽象方法。就是这 ...

我只是想知道没有抽象方法的抽象类存在的意义
回复 使用道具 举报
为了更好的维护论坛的学习氛围,如果您的的问题“已经解决”请即时将帖子状态改成“已解决”

-------------------坚持学习,黑马因你而精彩---------------
回复 使用道具 举报
没有抽象方法的抽向类的作用:
1.该类不能创建对象
2.还有一个重要的概念,是为了简化代码的书写。向这种没有抽向方法的抽向类在GUI工具包中,事件监听方法中应用很多,你有时间可以看看,接下来你可以看个例子:
  1. interface Inter        //定义接口
  2. {
  3.         public void show1();
  4.         public void show2();
  5.         public void show3();
  6.         public void show4();
  7. }

  8. //定义没有抽向方法的抽向类,并实现Inter,覆盖全部方法
  9. abstract class AbstractClass implements Inter
  10. {
  11.         public void show1(){}
  12.         public void show2(){}
  13.         public void show3(){}
  14.         public void show4(){}
  15. }

  16. //定义一个子类,继承AbstractClass抽向类,复写其show1方法
  17. class AbsDemo extends AbstractClass
  18. {
  19.         public void show1()
  20.         {
  21.                 System.out.println("我只用 show1 方法");
  22.         }
  23. }

  24. class Demo
  25. {
  26.         public static void main(String[] args)
  27.         {
  28.                 new AbsDemo().show1();
  29.         }
  30. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
有意义,他的意义是节省了代码量
回复 使用道具 举报
陌路行者 发表于 2013-7-3 21:18
我只是想知道没有抽象方法的抽象类存在的意义

不能实例化对象
回复 使用道具 举报

啥方法都没有,那么要它干吗?
回复 使用道具 举报
你可以自己定义方法不一定要抽象方法和属性,你想要干嘛呢?
回复 使用道具 举报
oxf974025918 发表于 2013-7-4 13:55
你可以自己定义方法不一定要抽象方法和属性,你想要干嘛呢?

哦。。。。。。。。  明白啦!  真是糊涂虫
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马