jvm虚拟机深入了解多态

什么是多态及多态的应用了解

多态可以分为向上转型和向下转型,程序分为编译器和运行期。两则呈现不同的状态,称为多态。例如人、中国人、朝鲜人三个类。

public class Person {
    public void say(){
        System.out.println("人说话!");
    }
}

public class Chinese extends Person {
    @Override
    public void say() {
        System.out.println("说中国话!");
    }

    public void cloth(){
        System.out.println("穿汉服!");
    }
}
        /*
        1、多态必须是具备继承关系。
        2、多态分为向上转型和向下转型
        向上转型:是jvm自动转载
        向下转型:必须要强制类型转换
        3、当需要访问子类中父类不具有的方法时才需要进行强制类型转换
        4、当编译器在编译的时候,只会读取Person.class文件,如果person.class中不具备的cloth方法就会报错,这个时候就需要进行强制类型转换
        */
        Person p = new Chinese();//(向上类型装换)jvm虚拟机的堆内存中会存放Chinese.class文件,p指向该文件,编译器直脑筋,只会指向Person.class
        p.say();//输出说中国话!运行期的p指向Chinese对象
        Chinese chinese = (Chinese) p;//强制类型转换(向下类型转换)
        chinese.cloth();
		  /*
        向上类型转换只要编译的时候不出问题就不会报错,但是向下类型有时候会抛出异常java.lang.ClassCastException因为虽然在编译器会认为p是person字节码文件,但是在运行过程p是指向Chinese字节码的,Chniese和Chaoxian之间没有继承关系,就会报错。
        1、在进行类型强制转换时应用 实例 instanceof 类型进行判断。
         */
        //Chaoxian chaoxian = (Chaoxian) p;
          if (p instanceof Chinese){
            Chinese chinese = (Chinese) p;
            chinese.cloth();
        }else if (p instanceof Chaoxian){
            Chaoxian chaoxian = (Chaoxian) p;
            chaoxian.cloth();
        }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值