黑马程序员技术交流社区

标题: 抽象类 [打印本页]

作者: 山水游客    时间: 2012-7-25 14:24
标题: 抽象类
抽象类的作用是什么?为什么不能被实例化?在Writer类中我发现了
构造方法
protected  Writer()
          创建一个新的字符流 writer,其关键部分将同步 writer 自身。
protected  Writer(Object lock)
          创建一个新的字符流 writer,其关键部分将同步给定的对象。
既然不能被实例化为什么还提供供子类调用的构造方法?
作者: 张扬123    时间: 2012-7-25 15:10
抽象类是不能够实例化的类.
它的作用就是产生子类的同时给于子类一些特定的属性和方法.
作者: 张莹莹    时间: 2012-7-25 15:36
抽象类的作用是什么?为什么不能被实例化?
抽象方法不能被实例化,抽象类中的方法都是抽象的,都没有方法体 ,只有个方法声明 你创建一个对象,调用它有什么用呢?
它的作用就是产生子类的同时给于子类一些特定的属性和方法.
举个现实生活的例子
如果你的程序里面需要用到苹果和梨这2个类..那么你可以分别给出这2个类
但是你会发现这2个类里面有共同的属性和方法(属性: 都有核.. 方法: 都需要削皮吃...)那么你可以建立抽象类 "水果" 基类把这些共同的东西都定义在那里. 那么你的2个子类就只需要实其他的方法了(味道, 价格,颜色...)
既然不能被实例化为什么还提供供子类调用的构造方法?
如果不指定参数,系统默认调用的父类无参的构造方法,super();
指定参数,就调用有参的构造方法,来对从父类那里继承的属性进行初始化,super(Object lock);

作者: 徐帅    时间: 2012-7-25 15:42
       当多个类中出现相同功能,但是功能主体不同,这时可以进行向上抽取。这时,只抽取功能定义,而不抽取功能主体
       抽象类中有构造方法是因为:抽象类是一个父类,要给子类提供实例的初始化
       抽象类不可以用new创建对象。因为调用抽象方法没意义。   
       抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,(若只是覆盖部分,子类继承后仍有抽象方法,就变成了抽象类)
         建立子类对象用。如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。

作者: 李菁    时间: 2012-7-25 18:48
抽象类主要是为了子类能够继承它的抽象方法,从而实现多态。抽象类和接口差不多,其实接口也算是一种抽象类。
抽象类之所以不能被实例化,最根本的原因就是它没有构造方法
作者: 刘海源    时间: 2012-7-25 18:52
抽象类:
特点:
1,没有方法体的方法是抽象方法,一定定义在抽象类中。
2,抽象类和抽象方法必须用abstract关键字所修饰。
3,抽象类不可以被实例化,为啥?
   因为调用抽象方法没有意义
4,抽象类必须尤其子类覆盖所有的抽象方法,其子类才可以进行实例化。
   是否责,该类还是个抽象类

   细节问题
1,抽象类一定是个父类?
  是,
2,抽象类是否可以不定义抽象方法?
  可以的,为了不让其创建对象,这种情况在java的体系中就有存在,一个

3,抽象类是否有构造函数?
   有,因为是给子类对象提供初始化动作的。

4,抽象关键字不能和哪些关键字共存?
  final :不能被继承:,而abstract需要被继承
  private 不能被覆盖了,
  static 不能被继承,继承之后没什么实在意义


一般类和抽象类有什么异同/
相同之处:
一般类和抽象类都用与描述事物,
里面可以定义属性和行为,以及构造函数
不同之处:
一般类中不可以定义抽象函数,抽象类可以,
一般函数可以被实例化,抽象类不行
一般类可以被继承,也可以不被继承
抽象类一定要被继承,需要其子类覆盖,




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