面向对象_多态

package com.duolianxidemo;

/**
 * 多态:对应同一个指令(调用同一个名称的方法),不同滴对象给予不同的反应(不同滴方法实现)
 *      规范:(多态实现的前提)
 *          1.必须要有继承关系
 *          2.子类必须重写父类的方法
 *          3.父类引用指向子类的对象(向上转型  自动转换)
 *          4.(向下转型 强制转换)例如:
 *          Pet pet = new Pet();
 *          Dog dog = (Dog)pet;
 *          【Dog为子类,Pet为父类】,
 *       编译通过,但是运行错误
 *    多态的目的:
 *          1.提高代码的扩展性和可维护性
 *          2.方便逻辑代码的编写
 *    多态的两种表现形式:
 *         1.父类作为子类的参数
 *         2.父类作为方法的返回值类型
 *  注意:
 *      1.向上转型的对象不能操作新增的成员变量和方法
 *      2.向上转型可以操作继承或者重写来的属性和方法
 *
 *  关键字instanceof:
 *      判断一个实例是否是一个类的对象
 */
Pet类:
public abstract class Pet {
    //抽象方法
    public abstract void feed();
    public void show(){
        System.out.println("show...");
    }
}

Dog类:

package com.duolianxidemo;

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

Penguin类:

package com.duolianxidemo;

public class Penguin extends Pet {
    @Override
    public void feed(){
        System.out.println("企鹅正在吃小鱼...");
    }

}

Tiger类:

package com.duolianxidemo;

public class Tiger extends Pet {
    public void feed(){
        System.out.println("老虎在吃生肉...");
    }
}

Person类:

package com.duolianxidemo;

public class Person {
//    public void feed(Dog dog){
//        dog.feed();
//    }
//    public void feed(Penguin p){
//        p.feed();
//    }
    //使用多态解决这个问题
    public void feed(Pet pet){
        pet.feed();
    }
        public Pet getPet(String Id){
        if (Id.equals("0")){
       return new Dog();
        }else if(Id.equals("1")){
            return new Penguin();
        }else{
           return new Tiger();
        }
    }
    public static void main(String[] args) {
        Person p = new Person();
        Pet dog = new Dog();//父类引用指向子类的对象,向上可以自动转型
        //dog.pp();
        dog.show();
        p.feed(dog);
        Penguin p1 = new Penguin();
        p.feed(p1);
        Pet tiger = new Tiger();
        tiger.feed();
         Pet pet = p.getPet("3");
         if (pet instanceof Dog){
             System.out.println("你领养的是狗狗!");
         }else if (pet instanceof Penguin){
             System.out.println("你领养的是小企鹅!");
         }else /*if (pet instanceof Tiger)现阶段写不写我认为都行*/{
             System.out.println("恭喜你sb,领养的是一只大老虎!");
         }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值