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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qmayuan 中级黑马   /  2013-7-29 09:39  /  1512 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么子类继承父类方法,就要必须重写父类的抽象方法?为什么不重写就无法new子类的对象呢?

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 淡定

查看全部评分

8 个回复

倒序浏览
抽象类可以没有抽象方法,也可以全部是抽象方法,如果子类继承的父类是抽象类,子类必须重写父类里所有的(是所有的)抽象方法,才能被实例化,也就是创建对象,要不然子类也将是个抽象类,抽象类不能被实例化

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 赞一个!

查看全部评分

回复 使用道具 举报
因为父类是子类向上抽取得来的,就像猫和狗都属于动物,他们都有吃的功能,后来又增加了“叫”的功能,这时就必须在父类里添加“叫”的抽象方法。
我没有看见你代码,真的不好和你解释。希望我的回答能帮得到你。
回复 使用道具 举报
继承父类的抽象方法不重写,子类也是抽象类不能实例化。
回复 使用道具 举报
谢谢啦。赶脚明白了~!
回复 使用道具 举报
我想说的是:抽象类存在的作用什么?抽象类中通常有抽象方法(没有抽象方法的没必要定义成抽象类),抽象方法是为了给多个子类提供统一的接口,这也是子类继承抽象类的意义所在,抽象类中的抽象方法只有申明,而没有具体的实现,至于不重写抽象方法为啥无法new子类对象,只有非抽象类才能实例化,如果子类不重写抽象方法,这样是无法通过编译的,可见java设计人员用心良苦啊!

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 赞一个!

查看全部评分

回复 使用道具 举报
甲鱼的屁股,龟腚吧,

评分

参与人数 1黑马币 +3 收起 理由
神之梦 + 3 淡定

查看全部评分

回复 使用道具 举报
抽象类只是定义了方法的功能,而没有实现该功能的具体方法,子类通过继承父类并重写该功能才能通过子类对象能使该功能具体实例化,
abstract class Sporter//定义一个运动员类
{
        abstract void play();//运动员都有的运动,但项目不定抽象方法
}
interface Study//接口扩展,一部分具备学习功能,定义一个学习接口
{
}
class WangWu extends Sporter implements Study
//王五继承运动员运动的功能,但又具备扩展来的学习功能
{
    //子类通过继承父类复写功能和实例化接口使该接口具体
}

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 赞一个!

查看全部评分

回复 使用道具 举报
抽象方法:abstract关键字定义
          没有方法体
抽象方法只是一种用来声明的方法,如果子类继承的父类里有抽象方法,就必须将这个抽象的已经声明的方法进行实现。
如果没有重写(实现)父类的抽象方法,就出编译不通过,会报错的,不只是不能new实体对象了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马