题目如下:
源码附上:
package 真题;
public class test_2013_high {
public static void main(String[] args) {
V1Drawing v1Drawing = new V1Drawing();
Circle circle = new Circle(v1Drawing,1,2,3);
circle.draw();
V2Drawing v2Drawing = new V2Drawing();
Rectagle rectagle = new Rectagle(v2Drawing,1,2,3,3);
rectagle.draw();
}
}
interface Drawing { //后面用的是implements 所以明显Drawing是一个接口
void drawLine(double x1, double y1, double x2, double y2);
void drawCircle(double x, double y, double r);
}
class DP1 {
static public void draw_a_line(double x1, double y1, double x2, double y2){
}
static public void draw_a_circle(double x, double y, double r){
}
}
class DP2 {
static public void drawline(double x1, double y1, double x2, double y2){
}
static public void drawcircle(double x, double y, double r){
}
}
class V1Drawing implements Drawing {
@Override
public void drawLine(double x1, double y1, double x2, double y2) {
DP1.draw_a_line(x1, y1, x2, y2);
}
@Override
public void drawCircle(double x, double y, double r) {
DP1.draw_a_circle(x, y, r); //根据类图 直接用类名调用类的静态方法
}
}
class V2Drawing implements Drawing {
@Override
public void drawLine(double x1, double y1, double x2, double y2) {
DP2.drawline(x1, y1, x2, y2);
}
@Override
public void drawCircle(double x, double y, double r) {
DP2.drawcircle(x, y, r); //根据类图 直接用类名调用类的静态方法
}
}
abstract class Shape {
private Drawing _dp;
abstract public void draw(); //根据Shape的两个子类:均重载了draw方法 所以在这里应该定义draw的抽象方法
public Shape(Drawing _dp) {
this._dp = _dp;
}
public void drawLine(double x1, double y1, double x2, double y2){
_dp.drawLine(x1, y1, x2, y2);
}
public void drawCircle(double x, double y, double r) {
_dp.drawCircle(x, y, r);
}
}
class Rectagle extends Shape {
private double _x1, _x2, _y1, _y2;
public Rectagle(Drawing _dp, double _x1, double _x2, double _y1, double _y2) {
super(_dp);
this._x1 = _x1;
this._x2 = _x2;
this._y1 = _y1;
this._y2 = _y2;
}
@Override
public void draw() {
System.out.println("这画的是一条线!");
}
}
class Circle extends Shape {
private double _x, _y, _r;
public Circle(Drawing _dp, double _x, double _y, double _r) {
super(_dp);
this._x = _x;
this._y = _y;
this._r = _r;
}
@Override
public void draw() {
System.out.println("这画的是一个圆!");
}
}
运行结果: