黑马程序员技术交流社区

标题: abstract [打印本页]

作者: 李蛟龙    时间: 2012-5-6 17:10
标题: abstract
本帖最后由 李蛟龙 于 2012-5-6 17:16 编辑

没有抽象方法的抽象类有什么用?它没有抽象方法,可不可以被实例化?

作者: 郭振    时间: 2012-5-6 17:25
抽象类可以没有抽象方法,但是如果你的一个类已经声明成了抽象类,即使这个类中没有抽象方法,它也不能再实例化,即不能直接构造一个该类的对象。
如果一个类中有了一个抽象方法,那么这个类必须声明为抽象类,否则编译通不过。
作者: 黑马张立国    时间: 2012-5-6 17:31
abstract 类 里必须有一个abstract方法,然后才能定义为abstract类
如果abstract类里,方法全是abstract的,就可以定义为interface
abstract与interface的区别
abstract就像长方形
interface就像正方形
作者: 谭景宾    时间: 2012-5-6 17:37
2楼的第一句有误,abstract抽象类里没有abstract方法,也可定义为abstract抽象类。
一旦定义了abstract的抽象类,不管有没有抽象方法都不能被实例化。
作者: 李震 李震 李震    时间: 2012-5-6 17:38
本帖最后由 黑马我来了 于 2012-5-6 17:54 编辑

  呵呵 谢谢楼主提出个这个问题,刚刚在网上搜索了相关帖子,也明白了没有抽象方法的抽象类存在的意义,没有抽象方法的抽象类,你不能实例化,确实让人很痛苦,又不知道在什么情况下用到它。其实jdk的I/O包中有个很好的列子FilterReader这个类,就是木有抽象方法的抽象类!它里面用到了装饰设计模式!比如用FilterReader这个类操作文件,你只有继承FilterReader这个类重写他的方法,然后实例化子类这样才有意义!
这个网站说的比我更详细 http://www.java3z.com/cwbwebhome/article/article2/2906.html?id=1567
作者: 谭景宾    时间: 2012-5-6 17:39
写错了,应该是3楼的第一句有误
作者: 张小锋    时间: 2012-5-6 17:41
作用:就是你把你以后需要用到的方法先写出来,就相当于 一本书的目录一样。具体内容,需要到书中指定页面才可以看到。而程序,具体的实现是有它的子类来实现的。即子类继承抽象类。

jdk只是个java运行环境而已,java抽象类则是一种编程技术,在java当中,有很多个类是重复的,那么就把重复的部分抽取出来,写到父类里,而有些行为不一样的,就声明它为抽象方法,有子类去实现它,总之一句话,就是为了编程方便,不想写太多重复的代码。
作者: adison    时间: 2012-5-6 17:45
只要是抽象类都不能被实例化,至于为什么要有没有抽象方法的抽象类 ,就是防止它被实例化,因为实例化它没有意义,实例化出来的对象根本完成不了所需的功能要求,从设计角度上来说是告诉类调用者,这个类是用来扩展的而不是用来使用的,当我们需要哪些方法,通过子类复写来实现我们所需功能,有抽象方法的抽象类,其子类必须实现所有抽象方法。所以相对来说,前者更为方便。。
可参照http://www.java3z.com/cwbwebhome/article/article2/2906.html?id=1567
作者: 赵志勇    时间: 2012-5-6 18:40
路过,非常渺茫
作者: 张成龙    时间: 2012-5-6 19:12
抽象类是不能被实例化的;
抽象类中可以不定义抽象方法,不定义抽象方法的抽象类是为了不让该类建立对象。
作者: 黑马张立国    时间: 2012-5-7 13:13
不好意思 的确错了,通过这个问题加深了我对abstract的理解,更正了我第一印象的错误 使我有进步了一点。
abstract可以没有abstract方法,而他的作用是阻止被new。
final修饰的类,可以被阻止extends。
-------------------------------------------------------
黑马的发贴回帖,很给力,可以让人成长很快,可以让你发现被你忽略的小知识点
如果自己一个人埋头学,不容易找到自己的不足,而这样大家共同进步,
让我们一起进步吧,   感谢黑马
作者: 付左军    时间: 2012-5-7 18:04
已解决问题
java中的抽象类里可以没有抽象方法吗?如果可以,那么有...
  
问题补充: 我知道一个类中如果有抽象类的话,那么这个类就一定要设置为抽象类型。知道抽象类中可以有不是抽象的方法。知道抽象类中的所有抽象方法必须被全部实现,不管实现的类是此抽象类的每个抽象子类还是一个具体的子类。
提问者:tomore  提问时间:08-10-20 20:29  
最佳答案
的答案  ( 采纳时间: 70-01-01 08:00 )


-
评论  回答时间: 70-01-01 08:00 其他答案 (1)
winu 的答案


-
抽象类只是一种规范开发的使用方式,属于java的一种模式,规定继承于这个类的子类必须要自己实现抽象方法,是不可以存在非抽象方法的 我想,之所以把一个类声明为abstract,是因为想通过这个简单的声明方式使这个被声明的类不能被实例化,也就是说使任何人都不能在这个抽象类上使用new来实例化对象。 但是你继承了这个类就必须按软件设计人员的标准对他定义的抽象方法进行实现,这是属于java开发的一种规范,你要理解为你是一个程序员,你只能按照软件设计人员的思想设计自己的代码,而不是你一个人完成全部开发 在面向对象的范围,你继承于他的类,必定和他的类有一定的关系,至少存在共性
作者: 付左军    时间: 2012-5-7 18:05
百度看到的






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2