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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马任雪刚 中级黑马   /  2012-6-16 17:33  /  1336 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

抽象类不能被实例化对象,是因为调用它其中的抽象方法没有什么意义,那究其根本原因是不是抽象类中就不存在构造函数呢???

4 个回复

正序浏览
     abstract 说明一个类为抽象类,所谓抽象类是指不能直接实例化对象的类。如果一个抽象类贝说明了,则这个类中将包括一个或几个抽象方法。所谓抽象方法是指该方法只有方法说明却没有方法体,即没有具体实现的代码。抽象类本身不具备实际功能,它只用于衍生子类。定义抽象类和抽象方法的目的是建立抽象模型。抽象类中不一定包含抽象方法,但一旦某个类中说明了抽象方法,该类必须说明为抽象类。

抽象类不象具体类那样描述一类具体事物,它是提取多种具有相似性的具体事物的共同特征而产生的,

举个例子  ActionListener这个接口用implements 实现 然后重写其中的方法 然后成为一个类,然后才能实例...而对于抽象类 用extends关键字  继承后 重新抽象方法 然后才能实例化对象,而有些特殊的抽象类 一般不继承 比如说Container 和Griphics,是用JFrame.getContentPane()方法和getGriphics()  获取 而不是自己实例化
回复 使用道具 举报
哦,大哥,抽象类有构造方法的好不好。

因为抽象类它本身也是一个类,所以它也能有构造方法。
虽然它不能够被实例化,但是它的构造方法也是有用的,是用于给子类做初始化的。

抽象类之所以不能被实例化的原因:就是因为调用它的方法没有实际意义,所以干脆就不让实例化了,反正也没用。
回复 使用道具 举报
抽象类不象具体类那样描述一类具体事物,它是提取多种具有相似性的具体事物的共同特征而产生的,比如,helicoptor, jet, fighter父类plane,有start(),takeOff(),speedUp(),changeDirection()等方法,这是共性,但现实中有一个具体的plane吗?没有,它是抽象出来的,根本不存在。所以实例化一个plane是没有意义的,因此面向对象程序设计机制禁止对象实例化.另外,抽象类中可以有构造函数,但若果在父类中(也就是抽象类)中显示的写了有参数的构造函数,在子类是就必须写一个构造函数来调用父类的构造函数。举例如下:
abstract class Person {   //定义一个抽象类,必须被继承



    Person(int i) {



   }

}



public class Student extends Person {



    Student() {

     super(int i)://必须显示的调用父类构造方法//super代表父类对象

  }

}


回复 使用道具 举报
本帖最后由 龙秋地 于 2012-6-16 17:45 编辑

首先抽象类 是包含抽象方法的类,而不是像接口只能包含抽象方法.而且还有成员变量和方法.
而构造方法的作用是:
1.创建对象.
2.初始化.
抽象类一定有构造方法,如果不写的话编译器会帮你加。
因为抽象类一定会有子类,
而子类的构造方法肯定会有super(),所以抽象类有构造方法.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马