本帖最后由 张君 于 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(静态); 此时执行父类的 静态函数。
|