黑马程序员技术交流社区
标题:
抽象类中为什么有非抽象方法
[打印本页]
作者:
周一川
时间:
2013-3-22 18:29
标题:
抽象类中为什么有非抽象方法
抽象类中为什么可以有非抽象的方法,子类继承的是时候要覆盖父类方法吗,如果子类有特有方法,那么执行时是先找父类的, 还是直接找子类的
作者:
曹春贵
时间:
2013-3-22 18:51
抽象类不一定有抽象方法,但是有抽象方法的类一定是抽象类。抽象类和普通类的区别就是它不可以实例化,它多了抽象方法,抽象方法只定义了方法的名称。这个让我解释也不会太清楚,把它当做知识点记了。子类继承父类的话,可以覆盖非private修饰的方法,也可以不覆盖,但是若抽象的父类有抽象方法则必须覆盖写出这个方法。子类继承父类方法后,这个子类对象如果执行方法的话,只要子类重写了就执行子类的,不执行父类的。
作者:
安鹏宇
时间:
2013-3-22 19:06
如果父类中有抽象方法,子类必须重写父类所有的抽象方法
如果父类是抽象类,子类也是抽象类,子类可以选择是否重写父类中的方法
可以重写也可以不重写
还有子类是抽象类,父类不一定必须是抽象类。
如果你要用子类独有的方法,一是子类实例化用对象调用
二是父类引用指向父类对象,用这个必须要执行向下转型操作,用instanceof进行判断
调用的当然是子类里的方法。
作者:
张君
时间:
2013-3-22 19:57
本帖最后由 张君 于 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(静态); 此时执行父类的 静态函数。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2