java基础之多态

再继承的基础上,更加便捷的使用,就需要多态

在Java中,多态可以通过继承和接口实现

  1. 编译时:通过继承和方法重写,子类对象可以被当作父类对象使用:对象 instanceof 子类
  2. 运行时:通过方法的动态绑定,根据对象的实际类型确定调用哪个方法

1.抽象父类代码:抽象abstract只会固定格式不会有方法体,需要子类重写 

package began;

//抽象父类

public abstract class Pet{
    String name;//名字
    int power;//能量值

    public abstract void eat(int num);//抽象方法没有方法体,必须由子类来继承重写

}

 2.子类1:子类需要重写父类所有的方法

package began;

//子类需要去重写父类的所有方法
public class PetDog extends Pet {

    public PetDog(String name,int power){
        this.name=name;
        this.power=power;
    }

    //狗的共同方法,比如看家
    public void lookdoor(){
        System.out.println("I am looking door");
    }

    //重写
    @Override//注解
    public void eat(int num) {
        this.power+=num;
        System.out.println("小狗"+this.name+"能量值增加了"+num+"最终为"+this.power+"能量值");
    }
}

3.子类2

package began;

public class PetCat extends Pet {
    public PetCat(String name,int power){
        this.name=name;
        this.power=power;
    }

    //猫的共同方法,比如抓老鼠
    public void catchMouse(){
        System.out.println("I am catching mouse");
    }

    //重写
    @Override//注解
    public void eat(int num) {
        this.power+=num;
        System.out.println("小猫"+this.name+"能量值增加了"+num+"最终为"+this.power+"能量值");
    }

}

4.驱动子类综合调动

package began;

public class Petmaster {
    public static void feed(Pet pet, int num) {  //Pet pet,pet在具体输入的是dog还是cat自动识别
        pet.eat(num);
    }

    //master类中work的方法去驱动动物工作
    public void work(Pet pet){
        //区分动物类型   对象 instanceof 类型
        if(pet instanceof PetDog){
            PetDog dog=(PetDog)pet;//向下转型,从父类-->子类,强制父类Pet转型为子类PetDog
            dog.lookdoor();
        }else if(pet instanceof PetCat){
            PetCat cat=(PetCat)pet;
            cat.catchMouse();;
        }
    }

}

5.主函数

package began;

public class TPET {
    public static void main(String[] args) {
        //综合调度其他类
        PetDog dog = new PetDog("周梦",100);
        PetCat cat = new PetCat("姚旺",120);
        Petmaster master =new Petmaster();
        Petmaster.feed(dog,30);
        master.feed(cat,50);

        master.work(dog);
        master.work(cat);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Absinthe_苦艾酒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值