黑马程序员技术交流社区
标题:
关于类的子类对继承方法的处理问题?
[打印本页]
作者:
李成航
时间:
2012-3-13 15:11
标题:
关于类的子类对继承方法的处理问题?
例如一个类下的多重继承关系,关于继承成员的调用问题:
class A {public void tes(){System.out.println("a");} }
class B extends A {public void tes(){System.out.println("b");}}
class C extends B {}
public class Test{
public static void main(String[] args){
C c=new C();
c.tes()://我想问此时c对象是调用B的tes方法,还是A的tes方法???
}
}
作者:
倪鹏博
时间:
2012-3-13 15:26
应该是B的tes方法,应为子类可以复写父类的方法!B继承了A,所以复写了A的tes方法,C继承B ,所以运行后是从B之中继承来的tes方法!
作者:
秦超
时间:
2012-3-13 15:32
是B的方法,当子类继承父类的时候,子类里面的方法名和父类的一样的时候,此时子类的方法会覆盖父类的方法,所以C继承B的时候,其实是继承了B覆盖了A的方法
作者:
贠(yun)靖
时间:
2012-3-13 19:22
多态看谁调用谁的方法 是看引用 引用是谁的的就是调用谁的方法
比如你的代码中 A 创建一个引用 指向子类对象B 看似调用的是b的方法 其实调用的是A父类中的方法
但是结果为什么是显示子类b中方法的内容呢?
这是因为 子类方法把父类方法覆盖了 可以理解为 这时候子类方法 和父类方法的内容是完全一样的
所以 父类引用其实调用的是父类的方法
而你创建的是 子类的子类c 的引用 又指向了 C类创建的对象 这个更好理解了
如果C子类方法中覆盖了父类的方法 那么调用的是c子类的方法 如果没有覆盖
就像你写的那样 肯定调用的是父类B的方法啊 因为子类C中压根就没有方法 但是要说的一点是 如果B中也没有test方法的话
那么 肯定调用的是c的父类B的父类A 的方法了 即就是 超类a的方法 直接从c越级到a
作者:
adison
时间:
2012-3-13 19:41
调用的是B的tes方法,纠正你一下,java中没有多重继承,只有单继承,你这种情况叫多层继承,基于此,子类继承哪个父类,如果没复写操作,就会继承哪个父类的方法,调用时就调用哪个方法,而不会调用父类的父类的同名方法,况且,父类的父类的同名方法已经被父类复写了,除非你建立一个A类的对象,不然,不可能调用到A的tes方法
作者:
崔岩
时间:
2012-3-13 21:20
首先,B类继承了A,然后再B中,重写了test方法,所以呢B中的test已经不再等于他的父类了。 再这之后C又继承了B,所以C中的test一定是B重写之后的test。所以输出b
作者:
泮和顺
时间:
2012-3-13 21:31
改下C类也复写这个方法 然后A a=new C();问同样的问题呵呵
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2