黑马程序员技术交流社区

标题: 关于抽象类的问题 [打印本页]

作者: 刘亚东    时间: 2014-7-10 13:11
标题: 关于抽象类的问题
抽象类不能被实例化
如果要调用抽象类中的方法,就得让继承此类的子类重写所有的此类中的抽象方法
可是
抽象类中可以不定义抽象方法
那么当一个类继承这个抽象类的时候,子类创建对象要调用这个抽象中的方法,是不是可以直接调用,不用重写什么?

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

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

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

那就是说可以直接调用,不需要重写的过程?
那抽象类中的构造函数又是怎么回事?没太明白。
作者: 龙飞九天    时间: 2014-7-10 16:02
抽象类里是可以有构造方法的,只不过该构造方法并不是用于创建该抽象类的对象,而是用于被子类调用的
作者: ╄Tracyぺ    时间: 2014-7-10 17:19
只要类一定义就会有默认的构造函数,抽象类虽然不能创建对象,但抽象类会有子类,抽象类中的构造方法是可以给子类对象初始化的
作者: sugar    时间: 2014-7-10 17:39
抽象类跟普通类没有什么太大的区别,只是多了抽象方法;不能被实例化;所以,构造函数,普通函数与普通类中的一样;
作者: 刘亚东    时间: 2014-7-10 22:09
龙飞九天 发表于 2014-7-10 16:02
抽象类里是可以有构造方法的,只不过该构造方法并不是用于创建该抽象类的对象,而是用于被子类调用的 ...

那抽象类中的构造方法是不是抽象的?
作者: 刘亚东    时间: 2014-7-10 22:10
sugar 发表于 2014-7-10 17:39
抽象类跟普通类没有什么太大的区别,只是多了抽象方法;不能被实例化;所以,构造函数,普通函数与普通类中 ...

那就像我的第一个问题,抽象类不是可以不定义抽象方法么,一个抽象类中如果定义的全是普通方法,那子类在继承这个抽象类的时候还需要做重写的动作么?
所以我才问构造方法是不是抽象的,如果是抽象的,那是不是子类要重写这个继承的抽象类的构造方法?




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