java中的多态原理

java中多态的应用

多态的应用有三个条件
1)继承
2)重写
3)向上转换 (基本引用去去引用派生类对象)
什么叫多态?上概念:就是用基类引用,引用不同的派生类对象,通过基类的引用变量调用同名覆盖方法,这个基类引用引用了哪个派生类对象,就会调用哪个派生类对象重写的方法
感觉这个概念已经很简洁了,有不懂的兄弟,可以多读几遍理解一下

静多态:编译时确定调用哪个方法 重载
动多态:运行时确定调用哪个方法 重写

好处是不用给每一个派生类提供相应的入口,而是用基类引用来接收所有的派生类对象,然后调用同名覆盖方法来实现多态调用
上代码:

interface IAnimal{  // 写一些动物特有得功能,不是每个动物都具有这里定义的功能
    int DATA = 10; // public static final标识符
    void fly(); // 接口的方法默认就是public abstract
}

abstract class Animal { // 拥有抽象方法的类,必须是一个抽象类
    protected String name;//属性
    public Animal(String name) {
        this.name = name;//构造函数
    }
    // 给所有派生类保留统一的抽象方法,等待派生类去重写
    public abstract void bark(); // 抽象方法
}

// 猫 - 实体类
class Cat extends Animal{
    public Cat(String name) {
        super(name);//用super继承有参构造函数
    }
    @Override  // !!!在派生类中一定要重写基类继承来的抽象方法
    public void bark() {
        System.out.println(name + "bark: miao miao!");
    }
}

// 狗 - 实体类
class Dog extends Animal{

    public Dog(String name) {
        super(name);
    }

    @Override
    public void bark() {
        System.out.println(name + "bark: wang wang!");
    }
}

// 猪 - 实体类
class Pig extends Animal{

    public Pig(String name) {
        super(name);
    }

    @Override
    public void bark() {
        System.out.println(name + "bark: heng heng!");
    }
}

// 鸟 - 实体类
class Bird extends Animal implements IAnimal{

    public Bird(String name) {
        super(name);
    }

    @Override
    public void bark() {
        System.out.println(name + "bark: ji ji zha zha!");
    }

    public void fly(){
        System.out.println(name + " flying!!!");
    }
}


/**
 * 多态描述:
 *
 */
public class 多态 {

    /**
     * 
     *            对扩展开放   对修改关闭
     */
    public static void show(Cat cat){
        cat.bark();
    }

    public static void show(Dog dog){
        dog.bark();
    }

    public static void show(Pig pig){
        pig.bark();
    }

    public static void show(Animal animal){  //
        animal.bark(); // 通过函数的动态绑定做到的
        // 如果这个动物是鸟的话,还要飞一下
        if(animal instanceof IAnimal){
            ((IAnimal) animal).fly();
        }
        /**
         * instanceof比较方法,判断animal是否属于IAnimal的一个实例化对象
         */
    }

    public static void main(String[] args) {
        show(new Cat("加菲猫"));
        show(new Dog("哈巴狗"));
        show(new Pig("佩奇"));
        show(new Bird("百灵鸟"));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值