Java多态

Pet.java

public abstract class Pet {

    //吃东西
    public abstract void feed();
}

Dog.java

public class Dog extends Pet{

    @Override
    public void feed() {
        System.out.println("狗在吃骨头.....");
    }
    public void test(){
        System.out.println("test.... ...");
    }
}

Penguin.java

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

Cat.java

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

主人类:Person.java

/*
多态:
 *       对应同一个指令(调用同一个名称的方法),不同的对象给予不同的反应(不同的方法实现)
 *   规范(多态实现的前提):
 *       1、必须要有继承关系
 *       2、子类方法必须重写父类的方法
 *       3、父类引用指向子类对象(子类实例)
 *   多态的目的:
 *       1、为了提高代码的扩展性和维护性
 *       2、方便代码逻辑的编写
 *   多态的两种表现形式:
 *       1、父类作为方法的参数
 *       2、父类作为方法的返回值类型
 *
 *   引用类型的转换跟基本数据类型的转换类似:
 *       1、当父类需要转成子类的时候,要进行强制转换,但是在强制转换之前一定要先判断父类引用指向的子类对象到底是谁,
 *            如果无法确定,在运行过程中可能出错
 *       2、当子类需要向父类转换的时候,直接自动转换,不需要进行任何的判断。
 *
 */


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 typeId){
        if(typeId.equals("0")){
            return new Dog();
        }else if(typeId.equals("1")){
            return new Penguin();
        }else{
            return new Cat();
        }
    }


    public static void main(String[] args) {
        Person person = new Person();
        Pet dog = new Dog();
        person.feed(dog);
      //  dog.test();(错误,不能调)
        Pet penguin =new Penguin();
        person.feed(penguin);
        Cat cat =new Cat();
        cat.feed();

        Pet pet = person.getPet("1");
        if(pet instanceof Dog){
            System.out.println("领养的是狗");
        }else if(pet instanceof Penguin){
            System.out.println("领养的是企鹅");
        }else if(pet instanceof Cat){
            System.out.println("领养的是猫");
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值