• Tags , , , ,         
  • 2017-12-21  21:03:44        
  • 62 °C    

    我们在上一节已经知道了,多态的实现条件是:继承,重写和向上转型

    我们已经知道,创建一个指向子类的父类类型引用,该引用既可以处理父类Father对象,也可以处理子类Child对象,当相同的消息发送给子类或者父类对象时,该对象就会根据自己所属的引用而执行不同的行为,这就是多态。

    多态的实现方式也有两种:基于继承实现和基于接口实现

    基于继承实现的多态


    基于继承的实现的多态主要表现在,父类可以对多个子类重写的方法,表现出来。我们来看一个例子:

    public class Shape {
    private String name;
    
    public String getName() {
    return name;
    }
    
    public void setName(String name) {
    this.name = name;
    }
    
    public Shape(){
    }
    
    public String draw(){
    return "画的是 " + getName();
    }
    
    /**
    * 重写toString()
    */
    public String toString(){
    return null;
    }
    }
    
    public class Circle extends Shape{
    public Circle(){
    setName("Circle");
    }
    
    /**
    * 重写父类方法,实现多态
    */
    public String draw(){
    return "画的是 " + getName();
    }
    
    /**
    * 重写toString()
    */
    public String toString(){
    return "Shape : " + getName();
    }
    }
    
    public class Triangle extends Shape{
    public Triangle(){
    setName("Triangle");
    }
    
    /**
    * 重写父类方法,实现多态
    */
    public String draw(){
    return "画的是 " + getName();
    }
    
    /**
    * 重写toString()
    */
    public String toString(){
    return "Shape : " + getName();
    }
    }
    
    public class Test {
    public static void main(String[] args) {
    //定义父类数组
    Shape[] Shapes = new Shape[2];
    //定义两个子类
    Circle Circle = new Circle();
    Triangle Triangle = new Triangle();
    
    //父类引用子类对象
    Shapes[0] = Circle;
    Shapes[1] = Triangle;
    
    for(int i = 0 ; i < 2 ; i++){
    System.out.println(Shapes[i].toString() + "--" + Shapes[i].draw());
    }
    System.out.println("-------------------------------");
    
    }
    }
    /*****www.breakyizhan.com******OUTPUT:
    Shape : Circle--画的是 Circle
    Shape : Triangle--画的是 Triangle
    ***/

    基于接口实现的多态:


    基于接口实现的多态是通过实现接口并覆盖接口中同一方法的几不同的类体现的。我们可以来看一个例子:

    interface Animal{ //接口的方法全部都是非静态的方法。
    
    public void eat();
    
    public void walk();
    }
    
    //接口的实现类
    class cat implements Animal{
    
    public void eat(){
    System.out.println("猫在吃!!");
    }
    
    public void walk(){
    System.out.println("猫在走!!");
    }
    
    }
    
    //接口的实现类
    class dog implements Animal{
    
    public void eat(){
    System.out.println("狗在吃!!");
    }
    
    public void walk(){
    System.out.println("狗在走!!");
    }
    
    }
    
    class Demo3
    {
    public static void main(String[] args)
    {
    //实现关系下的多态
    Animal d = new dog(); //接口的引用类型变量指向了接口实现类的对象。
    d.eat();
    d.walk();
    }
    }
    /*****www.breakyizhan.com******OUTPUT:
    狗在吃!!
    狗在走!!
    ***/

    本文内容来自:Java的多态的实现 – Break易站


    —Author: Arvin Chen —Web Address: www.breakyizhan.com (Break易站)

     
    转载请保留页面地址:https://www.breakyizhan.com/javamind/1009.html