我想问问,有谁可以帮我通过一段代码来解读一下多态的问题,尽量详细点,谢谢!

解决方案 »

  1.   

    例子网上很多
    http://www.zxbc.cn/html/20080421/33538.html
      

  2.   

    一般能用if else 的地方可以考虑换用多态
    写多态应注意以下三点:
          1.有继承  2.有方法的重写   3. 有父类引用指向子类对象public class Animal{
       public void who(){
         system.out.println("动物");
       }
    }public class  Bird extends Animal {  //有继承
      
      @overread  //有重写
      public void who(){
         system.out.println("鸟");
      }public class  Cat extends Animal {  //继承
      
      @overread   //重写
      public void who(){
         system.out.println("猫");
      }
    //下面是客户端
    public class Client {
      Animal animal = new Cat();  //父类引用指向子类对象
      animal.who();
    }
    }
      

  3.   

    看API  方法返回的一个Object  就是多态
      

  4.   

    多态性表现在三个方面,第一:继承,第二:重写,第三:父类引用指向子类对象,当然,这也是多态的三个必要的条件,推荐:http://www.tsp2c.cn/youshi.htm
      

  5.   

    public abstract class GeometricObject {
      private String color = "white";
      private boolean filled;  /** Construct a default geometric object */
      protected GeometricObject() {
      }  /** Construct a geometric object with specified properties */
      protected GeometricObject(String color, boolean filled) {
        this.color = color;
        this.filled = filled;
      }  /** Return color */
      public String getColor() {
        return color;
      }  /** Set a new color */
      public void setColor(String color) {
        this.color = color;
      }  /** Return filled. Since filled is boolean,
         so, the get method name is isFilled */
      public boolean isFilled() {
        return filled;
      }  /** Set a new filled */
      public void setFilled(boolean filled) {
        this.filled = filled;
      }  /** Abstract method findArea */
      public abstract double findArea();  /** Abstract method findPerimeter */
      public abstract double findPerimeter();
    }public class Triangle extends GeometricObject {

    private double side1,side2,side3; public double getSide1() {
    return side1;
    } public void setSide1(double side1) {
    this.side1 = side1;
    } public double getSide2() {
    return side2;
    } public void setSide2(double side2) {
    this.side2 = side2;
    } public double getSide3() {
    return side3;
    } public void setSide3(double side3) {
    this.side3 = side3;
    }

    public Triangle(){
    this(1.0,1.0,1.0);
    }

    public Triangle(double side1,double side2,double side3){
    this.side1 = side1;
    this.side2 = side2;
    this.side3 = side3;
    }

    @Override
    public double findArea() {
    // TODO Auto-generated method stub
    double temp = findPerimeter() / 2;
    return Math.sqrt(temp * (temp - side1) * (temp - side2) * (temp - side3));
    } @Override
    public double findPerimeter() {
    // TODO Auto-generated method stub
    return side1 + side2 + side3;
    } @Override
    public String toString() {
    return "  Triangle side1=" + side1 + ", side2=" + side2 + ", side3="
    + side3;
    }}public class TestTriangle { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    GeometricObject triangle1 = new Triangle();
    GeometricObject triangle2 = new Triangle(1,1.5,1);

    triangle1.setColor("Yellow");
    triangle1.setFilled(true);
    triangle2.setColor("Yellow");
    triangle2.setFilled(true);

    System.out.println("Triangle1 Area:" + triangle1.findArea() + ",Perimeter:" + triangle1.findPerimeter() + 
    " Color:" + triangle1.getColor() + " IsFill:" + triangle1.isFilled() + triangle1.toString());

    System.out.println("triangle2 Area:" + triangle2.findArea() + ",Perimeter:" + triangle2.findPerimeter() + 
    " Color:" + triangle2.getColor() + " IsFill:" + triangle2.isFilled() + triangle2.toString()); }}