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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

KJD

初级黑马

  • 黑马币:0

  • 帖子:8

  • 精华:0

© KJD 初级黑马   /  2012-11-1 19:52  /  1848 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

谁能给我解释下 什么是抽象类 抽象类和父类。PS:刚学java

点评

帖子题目麻烦以后规范点,让他人看到你要问的主题  发表于 2012-11-2 11:06

评分

参与人数 1黑马币 +30 收起 理由
杨千里 + 30 多看看 毕老师的 基础视频

查看全部评分

5 个回复

倒序浏览
抽象类是包含一种或多种抽象方法的类,它本身不需要构造实例。定义抽象类后,其它类可以对它进行扩充并且通过实现其中的抽象方法,使抽象类具体化,抽象类应该被实现

评分

参与人数 1技术分 +1 收起 理由
邓艳秋 + 1

查看全部评分

回复 使用道具 举报
用 abstract 修饰的类是抽象类,含有抽象方法的类称为抽象类,同样不能生成对象。
抽象类是不完整的,并且它只能用作基类。它与非抽象类的不同:
  1、抽象类不能直接实例化,并且对抽象类使用 new 运算符是编译时错误。虽然一些变量和值在编译时的类型可以是抽象的,但是这样的变量和值必须或者为 null,或者含有对非抽象类的实例的引用(此非抽象类是从抽象类派生的)。
  2、允许(但不要求)抽象类包含抽象成员。
  3、抽象类不能被密封。
  当从抽象类派生非抽象类时,这些非抽象类必须具体实现所继承的所有抽象成员,从而重写那些抽象成员。在下边的示例中:
  1. abstract class A{ public abstract void F();}
  2.   abstract class B: A{ public void G() {}}
  3.   class C: B{ public override void F() { // actual implementation of F }} 
复制代码
抽象类 A 引入抽象方法 F。类 B 引入另一个方法 G,但由于它不提供 F 的实现,B 也必须声明为抽象类。类 C 重写 F,并提供一个具体实现。由于 C 中没有了抽象成员,因此可以(但并非必须)将 C 声明为非抽象类。
总的来说抽象类和一般类的区别来说,只有一点 就是抽象类不能创建实例。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
楼上兄弟讲解的抽象的类语法很详细了,但我感觉不有必要补充一点,因为上面只是介绍了一下抽象的语法和用法规则。记得一开始学java的时候,我很迷惑,为什么要使用抽象类?因此这个方面出现,若想明白什么是抽象类,不能仅从用法规则来说明。我们如何定义一个抽象类呢(不从代码角度思考):规定出所有的具体类的方法特征作用系统的抽象层,这个抽象层预见了所有的可能扩展,因此在任何情况下不会改变。这样做的好处是什么呢?这使得系统满足了系“开-闭”原则的第二条:对修改关闭同时,从抽象层导出一个或多个新的具体类可以改变系统的行为,因此系统的设计对扩展是开放的,这就满足了“开-闭”原则的第一条:对扩展开放。定义抽象类,我们可以根据依赖倒转原则,开发很好的松耦合的系统,加强系统的可维护性。抽象层的好处不有很多,先举这一些吧。本人一点小拙见,如有错误,欢迎指证

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
徐强 发表于 2012-11-1 23:09
用 abstract 修饰的类是抽象类,含有抽象方法的类称为抽象类,同样不能生成对象。
抽象类是不完整的,并且 ...

谢谢你的帮助
回复 使用道具 举报
付维翔 发表于 2012-11-1 23:22
楼上兄弟讲解的抽象的类语法很详细了,但我感觉不有必要补充一点,因为上面只是介绍了一下抽象的语法和用法 ...

谢谢咯~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马