• 引用类型的强制类型转换


    1.什么时候需要用到强制类型转换

    当把子类变量赋给父类引用变量时,这个父类引用变量只能调用父类拥有的方法,

    不能调用子类特有的方法,即使它实际引用的是子类变量。

    如果需要让这个父类引用变量调用它子类的方法,就必须把它强制转换成子类类型。

    2.引用类型之间要强制转换成功需要有什么条件

    把父类实例转换成子类类型,则这个对象必须实际上是子类实例才行,否则将在运行时引发ClassCastException。

    3.让程序更健壮的写法:

    在强制转换前使用instanceof运算符判断是否可以成功转换。

    示例如下:

     1 class Base
     2 {
     3     private int value;
     4     public void say()
     5     {
     6         System.out.println("Base class");
     7     }
     8 }
     9 
    10 class Sub extends Base
    11 {
    12     public void say()
    13     {
    14         System.out.println("Sub class");
    15     }
    16     //子类的特有方法
    17     public void read()
    18     {
    19         System.out.println("Are you sleeping?");
    20     }
    21 }
    22 public class Test 
    23 {
    24     public static void main(String[] args) 
    25     {
    26         Base base=new Sub();
    27         base.say();//多态,会调用子类的方法
    28 
    29         if(base instanceof Sub)//先判断能否转换成功
    30         {
    31             ((Sub)base).read();//强转过后才可以调用read方法
    32         }
    33 
    34     }
    35 }

    总结:

    两种可能混淆的情况:

    把子类对象sub赋值给父类对象base,如果调用base中子类和父类都拥有的方法(子类重写的父类方法),那么这时实际上执行的是子类的方法,

    这种现象叫做多态;

    如果想用base对象调用子类特有的方法,就必须把base对象强转成子类对象后,才可以调用。

  • 相关阅读:
    同步和异步有何异同,在什么情况下分别使用他们?
    Android 缓存处理
    Android常用的设计模式概念
    Android常见的设计模式详解
    Android中的五大布局
    几种常见的引用概念
    面向对象的思想概述
    Android系统架构的简单描述
    display:none;与visibility:hidden;的区别
    块级元素和行内元素的区别
  • 原文地址:https://www.cnblogs.com/wsw-tcsygrwfqd/p/9250762.html
Copyright © 2020-2023  润新知