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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘亚东 中级黑马   /  2014-7-10 13:11  /  1436 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

抽象类不能被实例化
如果要调用抽象类中的方法,就得让继承此类的子类重写所有的此类中的抽象方法
可是
抽象类中可以不定义抽象方法
那么当一个类继承这个抽象类的时候,子类创建对象要调用这个抽象中的方法,是不是可以直接调用,不用重写什么?

那抽象类中有构造方法么?
构造方法是不是抽象的?

9 个回复

倒序浏览
是可以直接调用,但如果需要运行自己的逻辑代码时就需要重写,抽象类中有构造方法,构造方法谈不上抽象之分,只能说构造方法不能继承,但可以供子类用super()或super(有参)去调用,抽象类不想具体类那样描述一类具体事物,它是提取多种具有相似性的具体事物的共同特征而产生的,比如,jet,fight父类plane,有start(),takeOff()方法,这是共性,但现实中没有一个具体的plane,因为他是抽象出来的,所以实例化一个plane是没有意义的,因此面向对象程序设计机制禁止对象实例化
回复 使用道具 举报
抽象类无法实例化,怎么会有构造方法呢
回复 使用道具 举报
PowerLion 发表于 2014-7-10 14:42
抽象类无法实例化,怎么会有构造方法呢

那一个抽象类没有抽象方法的时候,有一个子类继承这个抽象类,那子类是不是就不用重写抽象类中的方法?
回复 使用道具 举报
╄Tracyぺ 发表于 2014-7-10 13:47
是可以直接调用,但如果需要运行自己的逻辑代码时就需要重写,抽象类中有构造方法,构造方法谈不上抽象之分 ...

那就是说可以直接调用,不需要重写的过程?
那抽象类中的构造函数又是怎么回事?没太明白。
回复 使用道具 举报
抽象类里是可以有构造方法的,只不过该构造方法并不是用于创建该抽象类的对象,而是用于被子类调用的
回复 使用道具 举报
只要类一定义就会有默认的构造函数,抽象类虽然不能创建对象,但抽象类会有子类,抽象类中的构造方法是可以给子类对象初始化的
回复 使用道具 举报
sugar 中级黑马 2014-7-10 17:39:58
8#
抽象类跟普通类没有什么太大的区别,只是多了抽象方法;不能被实例化;所以,构造函数,普通函数与普通类中的一样;
回复 使用道具 举报
龙飞九天 发表于 2014-7-10 16:02
抽象类里是可以有构造方法的,只不过该构造方法并不是用于创建该抽象类的对象,而是用于被子类调用的 ...

那抽象类中的构造方法是不是抽象的?
回复 使用道具 举报
sugar 发表于 2014-7-10 17:39
抽象类跟普通类没有什么太大的区别,只是多了抽象方法;不能被实例化;所以,构造函数,普通函数与普通类中 ...

那就像我的第一个问题,抽象类不是可以不定义抽象方法么,一个抽象类中如果定义的全是普通方法,那子类在继承这个抽象类的时候还需要做重写的动作么?
所以我才问构造方法是不是抽象的,如果是抽象的,那是不是子类要重写这个继承的抽象类的构造方法?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马