Java关于多态的设计、介绍、代码演示,以及instanceof强制类型转换的用法

/**
 什么是多态:
对象在运行过程中的多种形态。

多态性我们大概可以分为两类
1.方法的重载与重写
2.对象的多态性

 对象的多态性,
 对象的多态性是从继承关系中的多个类而来
 向上转型,将子类实例化转为父类
 格式:父类 父类对象=子类实例:->自动完成
 已基本数据类型操作为例:int i='a';

 向下转型,将父类实例转为子类实例
 格式: 子类 子类对象=(子类)父类实例;强制转换
 以基本数据类型操作为实例:char c=char(97);
 因为整形是4个字节比char2字节要大,所以需要强制转换
 */

public class duotai{
    public static void main(String[] args) {
        //类型转换,同类型才能转换,用父类的引用指向子类对象(用大的类型来表示小的类型),自动转换(向上转型)
        //HomeChicken hc=new HomeChicken("小鸡鸡");//家鸡属于鸡
        Chicken hc=new HomeChicken("小鸡鸡");
       // hc.eat();
        //YeChicken yc=new YeChicken("大鸡鸡");
        Chicken yc=new YeChicken("大鸡鸡");
       // yc.eat();

        //hc=yc;
       // hc.eat();
       //eat(hc);
      // eat(yc);
       Chicken jjc =new JianJiaoChicken("尖叫鸡");
       eat(jjc);
       eat(hc);
       eat(yc);
       


    }

    //抽象(粒度),面向抽象编程(面向接口编程)
    public static void eat(Chicken c){
        System.out.println("鸡吃饭");
        c.eat();
        //当我们需要把父类的实例强制转换为子类引用时,为了避免类型转换异常, java.lang.ClassCastException
        //c.song();不能使用
        if(c instanceof JianJiaoChicken){
        JianJiaoChicken jjc =(JianJiaoChicken)c;//大的类型转化为小的类型,强制转换(向下转型)
         jjc.song();
        }
    }
}
abstract class Chicken{
    private String name;
    public Chicken(){}
    public Chicken(String name){
        this.name=name;
    }
    public void setName(String name){
        this.name=name;
    }
    public String getName(){
        return name;
    }
    public abstract void eat();
}
//家鸡
class HomeChicken extends Chicken{
    public HomeChicken(){}
    public HomeChicken(String name){
        super(name);
    }
    public void eat(){
        System.out.println(this.getName()+",我爱吃米");
    }
}
//野鸡
class YeChicken extends Chicken{
    public YeChicken(){}
    public YeChicken(String name){
        super(name);
    }
    public void eat(){
        System.out.println(this.getName()+",我爱吃虫子");
    }
}
//尖叫鸡
class JianJiaoChicken extends Chicken{
    public JianJiaoChicken(){}
    public JianJiaoChicken(String name){
        super(name);
    }
    public void eat(){
        System.out.println(this.getName()+",我不吃东西");
    }
    public void song(){
        System.out.println("唧唧复唧唧,我是尖叫鸡");
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值