a) 设计一个图形接口,包括draw,erase两个方法
b) 设计一个圆,三角形,直线三种子图形,让其实现图形接口
c) 设计一个鼠标类,包含两个方法,一个是draw,让其能接收任何一种图形,并完成画的行为;另一个是erase,让其能接收任何一种图形,并完成擦除的行为
d) 最后设计一个测试类,产生三种图形,并使用鼠标类的方法来完成画和擦除。

解决方案 »

  1.   


    package com;public class Test {
    public static void main(String[] args){
    Picture p = null;
    int i = (int) (Math.random()*3);
    System.out.println("==="+ i);
    switch(i){
    case 0 : p=new Circle();break;
    case 1 : p=new Triangle();break;
    case 2 : p=new Line();break;
    }
    Mouse m = new Mouse();
    m.draw(p);
    m.erase(p);
    }
    }class Circle implements Picture {
    public void draw() {
    System.out.println("Circle draw()");
    }

    public void erase() {
    System.out.println("Circle erase()");
    }
    }class Triangle implements Picture {
    public void draw() {
    System.out.println("Triangle draw()");
    }

    public void erase() {
    System.out.println("Triangle erase()");
    }
    }class Line implements Picture {
    public void draw() {
    System.out.println("Line draw()");
    }

    public void erase() {
    System.out.println("Line erase()");
    }
    }class Mouse {
    void draw(Picture p){
    p.draw();
    }

    void erase(Picture p){
    p.erase();
    }
    }interface Picture {
    void draw();
    void erase();
    }
      

  2.   


    package net.csdn.test;public interface Shape {

    public void draw(); public void erase();
    }package net.csdn.test.impl;import net.csdn.test.Shape;public class Circle implements Shape { public void draw() {
    System.out.println("画一个圆.");
    } public void erase() {
    System.out.println("擦除一个圆.");
    }
    }package net.csdn.test.impl;import net.csdn.test.Shape;public class Triangle implements Shape { public void draw() {
    System.out.println("画一个三角形.");
    } public void erase() {
    System.out.println("擦除一个三角形.");
    }
    }package net.csdn.test.impl;import net.csdn.test.Shape;public class Beeline implements Shape { public void draw() {
    System.out.println("画一条直线.");
    } public void erase() {
    System.out.println("擦除一条直线.");
    }
    }package net.csdn.test;public class Mouse{ public void draw(Shape shape) {
    shape.draw();
    } public void erase(Shape shape) {
    shape.erase();
    }
    }package net.csdn.test;import net.csdn.test.impl.Beeline;
    import net.csdn.test.impl.Circle;
    import net.csdn.test.impl.Triangle;public class Tester {
    public static void main(String[] args) {
    Mouse mouse = new Mouse();
    Shape circle = new Circle();
    mouse.draw(circle);
    mouse.erase(circle); Shape triangle = new Triangle();
    mouse.draw(triangle);
    mouse.erase(triangle); Shape beeline = new Beeline();
    mouse.draw(beeline);
    mouse.erase(beeline);
    }
    }
      

  3.   

    这就是JAVA中的多态啊,用户在Test类中调用Mouse类draw(p)和erase(p)的参数是Picture接口变量,而不知道具体是哪一个实现Pictute接口的类的对象(在这里就是Circle,Triangle,Line的对象),只有在运行时才在知道具体是哪一个对象,在这里也就是看到结果时才知道