14/365 java 多态 instanceof

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

1.多态

多态的基础是动态编译对象的类型在运行时才确定。

当一个父类引用指向一个子类对象时

  • 父类引用调用父类独有的方法时则调用该父类方法
  • 父类引用调用子类重写的方法时则调用子类重写后的方法 并不会去调用父类中的同名方法
  • 父类引用调用子类独有的方法时会报错因为父类类型里并没有该方法
Rabbit r1 = new Rabbit();
Animial r2 = new Rabbit();

r1.act(); 
r2.act(); // 调用子类Rabbit的act方法

2.哪些方法不能被重写

static方法属于类不属于实例对象无法重写

final 在常量池中

private无法被子类继承

3.instanceof

语法  对象  instanceof 类

该对象是否属于右边的类或者属于右边的子类  返回boolean

看的是对象实际是什么类型而非看对象的引用类型

Animal a = new Rabbit();
Systemn.out.println( a instanceof Animal ); //true
Systemn.out.println( a instanceof Rabbit ); //true
Systemn.out.println( a instanceof Object ); //true
Systemn.out.println( a instanceof Tiger ); //false
Systemn.out.println( a instanceof String ); //编译报错

a实际是Rabbit所以是属于Rabbit类的也是Animal类和Object类的派生类。

当左边的对象类型与右边的类没有任何继承关系时会在编译时报错。

4.类型转换

基本类型看位数 64,32,16,8,4  高位数转低位数需要强制类型转换低转高不需要

引用类型父类转子类需要强制类型转换子类转父类不需要

Animal a = new Rabbit(); //子类转父类不需要强制转换
Rabbit r = (Rabbit)a;  //父类转子类需要强制类型转换可能会丢失子类的方法

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Java