日期:2014-05-20  浏览次数:20617 次

对继承的疑问,求教大家!
代码1:
package com.chem;
class A{
private void fun(){
System.out.println("******A类方法******");
}

}
class B extends A{
void fun(){  
System.out.println("******B类方法******");
}
}
public class ExtendsDemo01 {
public static void main(String[] args){
B b=new B();
b.fun();
}
}
代码2:
package com.chem;
class A{
private void fun(){
System.out.println("******A类方法******");
}
public void print(){
this.fun();
}
}
class B extends A{
void fun(){  
System.out.println("******B类方法******");
}
}
public class ExtendsDemo01 {
public static void main(String[] args){
B b=new B();
b.print();
}
}
代码1的输出结果:******B类方法******
代码2的输出结果:******A类方法******
代码2的输出结果为什么是A 有点弄不明白?求指导!


------解决方案--------------------
代码一是因为private 方法不可继承,并且就算是public 你也已经重写了fun()方法,所以你执行的肯定是你重写过的那个方法里面的代码。

代码二:
public void print(){
this.fun();
}
这里是执行的是A里面的fun方法,因为fun是private的,所以不能重写A里面的fun方法,就算重写了那个也是B里面的fun方法,而print()执行的时A里面的fun()方法,所以它的输出是那样的