Java -7 对象转型和多态性

对象转型

基本数据类型转换:

float f = 1.21F;

int a = (int) f;    //强制转换

double d = f;   //自动转换

 

引用数据类型转换:

Student  s1 = new Student(20,"张三",“电子科技大学中山学院”);

Person p=s1;    //将子类引用变量的值赋给父类引用变量 ,可以自动转换

s1 = (Student) p;  //将父类引用变量的值赋给子类引用变量,需要强制转换

 

转型类型分两种:

向上转型:让一个父类引用类型变量指向一个子类的对象,可以自动转换,而且,向上转型肯定是安全的。

向下转型:让子类引用类型变量指向父类的对象,需要强制转换,而且,向下转型不一定是安全的。而且如果发生错误,也是程序运行时出现异常。

 

因为向下转型不一定是安全的,所以在进行向下转型之前,可以通过运算符 “instanceof” 来事先判断:一个引用类型变量所指向的对象,是否是某个类的对象,或是否是某个子类的子对象。

“instanceof” 运算符使用的语法是: “引用类型变量名 instanceof 类名” ,这个表达式的值是一个布尔值。

如果这个表达式的值等于true ,则表明:这个引用类型变量所指向的对象是这个类的对象,或者是这个类的子类对象。

如果这个表达式的值等于false , 则表明:这个引用类型变量所指向的对象既不是这个类的对象,也不是这个类的子类对象。

 

 

多态性

  在程序的运行期间,而非编译期间,才能判断引用所指向的对象的实际类型,并根据这个对象的实际类型,来调用实际类型中定义的方法.这种语言特性称之为多态.

  只有当使用一个父类引用指向一个子类对象时,也就是当一个引用的编译时类型和运行时类型不一致的时候,而且子类覆盖了父类成员方法的时候,才会出现多态的语法现象.

  • 与方法不同的是,对象的属性并不具备多态性.
  • 静态成员变量和静态成员方法同样不具备多态性.
  • 一个Java的引用具有两种特性类型:编译时类型和运行时类型。
  • 编译时类型是指声明该引用时所用的类型,运行时类型是该引用实际指向的对象所属的类型。
  • 一个引用的编译时类型和运行时类型有时是相同的,比如代码“A a= new A ()”中,引用a 的编译时类型和运行时类型都是A。
  • 一个引用的编译时类型和运行时类型有时是不同的,比如A类是B类的父类,则代码“ A a=new B ()”中,引用a 的编译时类型就是A ,运行时类型就是B。
  • 在程序的编译阶段,编译器检查一个引用能够访问哪些成员时,是由这个引用的编译时类型决定的。

 

         

 

posted @ 2020-07-28 20:47  codeing123  阅读(115)  评论(0编辑  收藏  举报