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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周一川 中级黑马   /  2013-3-22 18:29  /  1844 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

抽象类中为什么可以有非抽象的方法,子类继承的是时候要覆盖父类方法吗,如果子类有特有方法,那么执行时是先找父类的, 还是直接找子类的

点评

如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-22 23:05

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

3 个回复

倒序浏览
抽象类不一定有抽象方法,但是有抽象方法的类一定是抽象类。抽象类和普通类的区别就是它不可以实例化,它多了抽象方法,抽象方法只定义了方法的名称。这个让我解释也不会太清楚,把它当做知识点记了。子类继承父类的话,可以覆盖非private修饰的方法,也可以不覆盖,但是若抽象的父类有抽象方法则必须覆盖写出这个方法。子类继承父类方法后,这个子类对象如果执行方法的话,只要子类重写了就执行子类的,不执行父类的。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
如果父类中有抽象方法,子类必须重写父类所有的抽象方法
如果父类是抽象类,子类也是抽象类,子类可以选择是否重写父类中的方法
可以重写也可以不重写
还有子类是抽象类,父类不一定必须是抽象类。

如果你要用子类独有的方法,一是子类实例化用对象调用
二是父类引用指向父类对象,用这个必须要执行向下转型操作,用instanceof进行判断
调用的当然是子类里的方法。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 张君 于 2013-3-22 19:58 编辑

抽象类中为什么可以有非抽象的方法,子类继承的是时候要覆盖父类方法吗,如果子类有特有方法,那么执行时是先找父类的, 还是直接找子类的

抽象类可以没有抽象方法,但是有抽象方法的类有抽象

子类继承父类时要复写父类的抽象方法,如果不全部复写父类的抽象方法,那么子类跟父类一样 也是抽象类,不可以 new 对象,

子类中特有的方法,执行时当然找子类了,

后面你学了 多态,就知道以下
            在多态中(父类引用指向子类对象Fu f= new Zi())成员函数的特点:
         *     在编译时期: 参阅 引用型变量所属的类中 是否有调用的方法(也就是 f.method() 这个方法在父类中有),如果有,编译通过,如果没有,便以失败
         *     运行时期: 参阅对象所属的类中是否有调用的方法。(也就是new 出来的对象中的方法 f.method2();在Zi 类中存在)
         *     简单总结就是: 成员函数在多态调用时,编译看左边,运行看右边。
         *     
         *     在多态中,成员变量的特点:
         *     就是子类父类出现同名成员变量。
         *     这是
         *     Fu f= new Zi();
         *     f. 同名变量;//先找父类的同名变量
         *     Zi z= new Zi();
         *     z.同名变量;//先找子类的同名变量
         *     无论编译和运行,都参考左边(引用型变量所属的类)
         *     _____________________________________
         *     多态情况下,当子类父类 都有同名静态函数时,
         *     Fu f =new Zi()
         *     f.method(静态); 此时执行父类的 静态函数。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马