zoukankan      html  css  js  c++  java
  • 引用类型的强制类型转换

    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对象强转成子类对象后,才可以调用。

  • 相关阅读:
    在Python下调用Labview
    CVX: Matlab Software for Disciplined Convex Programming
    ANSYS Electronics Desktop 调出HFSS模块
    在python下打开cmd,并调用其他py文件
    CVXOPT的安装
    分享小记:指数族分布
    应用运筹学基础:线性规划 (4)
    应用运筹学基础:线性规划 (3)
    应用运筹学基础:线性规划 (2)
    白话论文:A Tutorial on Principal Component Analysis
  • 原文地址:https://www.cnblogs.com/wsw-tcsygrwfqd/p/9250762.html
Copyright © 2011-2022 走看看