当前位置: 代码迷 >> J2SE >> java 一路多重继承的题目
  详细解决方案

java 一路多重继承的题目

热度:17   发布时间:2016-04-23 19:39:53.0
java 一道多重继承的题目
下图程序中我用画笔画了一下执行的过程,但是到了第7步就不知道程序是怎么执行的了
因为第7步中的shape是circle类型的,所以程序会找circle类里面的paint(),但是circle里面并没有paint(),所以程序到底是如何进行后续的操作的就不太理解了。









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);
System.out.println("Ellipse");
}
void paint(){
System.out.println(getName());
}
};

class Circle extends Ellipse{
public Circle(String name){
super(name);
System.out.println("Circle");
}
};

class Diagram{
private Shape shapes[] = new Shape[2];
public void drawAShape(Shape shape){
shape.paint();
}
/*void eraseAShape(Shape shape){
shape
}*/
void drawShapes(){
Circle a = new Circle("C");
drawAShape(a);


/* shapes[1] = new Ellipse("E");
for(int i=0;i<2;i++){
drawAShape(shapes[i]);
}*/
}
/*void close(){
for(int i=0;i<2;i++){
}
}*/
}

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

}
}

------解决思路----------------------
第7步public void drawAShape(Shape shape){
shape.paint();
}这里shape的实参是Circle a = new Circle("C");
就是调用a.paint(),Circle类虽然没有定义paint()方法,但是其父类定义了,
void paint(){
System.out.println(getName());
}
相当于System.out.println(a.getName());同样Circle类虽然没有定义getName(),但是其父类的父类定义了,
String getName(){
return this.name;
}
就是返回当前对象的name成员变量,这个name继承自Shape,在初始化的时候赋值为C
  相关解决方案