java 面向对象-多态polymorphism

  • Post author:
  • Post category:java


多态polymorphism

对于同一个指令(调用同一个名称的方法),不同的对象给予不同的反应(不同的方法实现)
规范:(多态实现的前提)
  1 必须要有继承关系;
  2 子类方法必须重写父类的方法;
  3 父类引用指向子类对象

  多态的目的:
    为了提高代码的扩展性和逻辑性
    为了方便代码逻辑的编写

 多态的两种表现形式:
    1 父类作为方法的形参
    2 父类作为方法的返回值类型

 引用类型的转换跟基本数据类型的转换类似:
    当父类需要转成子类的时候,要进行强制转换,但是在强制转换之前,一定要先判断父类引用指向的子类对象到底是谁,
       如果无法确定,在运行过程中可能出错
       ===使用instanceof运算符来判断,
          对象 instanceof 类或接口 

    当子类需要向父类转换的时候,直接自动转换,不需要做任何判断
package com.yuzhu;

public abstract class Pet {
    public abstract void feed();

    public void play()
    {
        System.out.println("playing");
    }
}

package com.yuzhu;

public class Cat extends Pet {
    @Override
    public void feed() {
        System.out.println("猫吃鱼");
    }
}


package com.yuzhu;

public class Dog extends  Pet {
    @Override
    public void feed() {
        System.out.println("狗吃骨头");
    }
}


package com.yuzhu;

public class Penguin extends Pet {
    @Override
    public void feed() {
        System.out.println("chi sha ya ");
    }
}


package com.yuzhu;


public class People {
/*    public void  feed(){
        new Dog().feed();
        new Cat().feed();
    }*/

    public void feed(Pet pet){
        pet.feed();
    }

    public void play(Pet pet){
        pet.play();
    }

    public Pet buy(int type){
        if(type == 1){
            return new Dog();
        }else if(type == 2) {
            return new Cat();

        }else{
            return new Penguin();
        }
    }

    public static void main(String[] args) {
        People people = new People();
        Pet cat = new Cat();  // 父类引用指向子类对象
        Pet dog = new Dog();
        Pet penguin = new Penguin();

        people.feed(cat );
        people.feed(dog );
        people.feed(penguin );

        people.play(cat );
        people.play(dog );

        Pet pet = people.buy(1);
        if(pet instanceof Dog){
            System.out.println("buy a dog");
        }else if(pet instanceof  Cat){
            System.out.println("buy a cat");
        }else{
            System.out.println("buy a penguin");
        }

    }
}



版权声明:本文为mick_hu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。