当前位置: 代码迷 >> J2SE >> 关于多重继承的方法调用解决方案
  详细解决方案

关于多重继承的方法调用解决方案

热度:87   发布时间:2016-04-23 19:36:47.0
关于多重继承的方法调用
下面程序中输出
*******
C
*******

有点不理解的地方是
程序的执行顺序我大概画了个图




问题是
执行到new circle("C").paint()的时候,发现circle里面没有paint方法,那么是如何最终输出   C     的呢?








package pe201101;

abstract class Shape{
public Shape(String name){
this.name = name;
}
abstract void paint();
String getName(){
return this.name;
}
final String name;
};

class Ellipse extends Shape{
public Ellipse(String name){
super(name);
}
void paint(){
System.out.println(getName());
}
};
class Circle extends Ellipse{
public Circle(String name){
super(name);
}
};
class Diagram{
private Shape shapes[] = new Shape[2];
public void drawAShape(Shape shape){
shape.paint();
}
void drawShapes(){
shapes[0] = new Circle("C");
drawAShape(shapes[0]);
}
}

public class java {
public static void main(String[] args) {
Diagram diagram = new Diagram();
diagram.drawShapes();

}
}

------解决思路----------------------
当你调用一个方法时,如果当前对象没有,则会沿着它的继承链依次向上寻找,直到最上层的Object类,如果还是找不到,会报错,找到了,执行它,并停止寻找。
在你这个例子中,Circle中找不到paint()方法,就去它的父类Ellipse中找,结果,找到了,执行它,于是,C被输出出来了。
  相关解决方案