精华内容
下载资源
问答
  • 对象类型转换
    2022-03-20 19:04:45

    学习了编写 Java 程序中的对象类型转换,而在编写Java程序时,都会遇到Java中的对象类型转换。所以往下面学习时,应当注意以下几点:
    Java对象类型转换:对象类型转换,是指存在继承关系的对象,
    不是任意类型的对象,分别是向上转型(upcasting)和向下转型(downcasting)。

    向上转型:父类引用指向子类对象为向上转型。fatherClass 是父类名称或接口

    名称,obj 是创建的对象,sonClass 是子类名称。

    向上转型就是把子类对象直接赋给父类引用,不用强制转换。

    使用向上转型可以调用父类类型中的所有成员,

    不能调用子类类型中特有成员,最终运行效果看子类的具体实现。

    向下转型:与向上转型相反,子类对象指向父类引用为向下转型。fatherClass 是父类名称,obj 是创建的对象,sonClass 是子类名称。
    向下转型可以调用子类类型中所有的成员,不过需要注意的是如果父类引用对象
    指向的是子类对象,那么在向下转型的过程中是安全的,也就是编译是不会出错误。
    但是如果父类引用对象是父类本身,那么在向下转型的过程中是不安全的,
    编译不会出错,但是运行时会出现我们开始提到的 Java 强制类型转换异常,一般使用 instanceof 运算符来避免出此类错误。
    创建对象:对象是根据类创建的。在Java中,使用关键字new来创建一个新的对象。创建对象需要以下三步:
    声明:声明一个对象,包括对象名称和对象类型。
    实例化:使用关键字new来创建一个对象,只是为对象在内存中开辟空间。
    初始化:使用new创建对象时,会调用构造方法初始化对象,对象中的值赋初始值。
    访问实例变量和方法,现在f1引用指向一个Son对象,
    现在f1还是指向Son对象,出错,子类引用不能指向父类对象,
    因为f1指向一个子类对象子类s1引用当然可以指向子类对象了。
    而f2 被传给了一Father对象,子类s1引用不能指向父类对象。

    更多相关内容
  • 对象类型转换

    千次阅读 2020-06-10 20:22:48
    顾名思义:对象类型转换 对象类型转换限制于子类父类之间的转换。例如:人这一父类与学生这一子类的相互转换 但是这个过程中设计

    顾名思义:对象的类型转换

    • 对象的类型转换限制于子类父类之间的转换。
      例如:人这一父类与学生这一子类的相互转换
      但是要明白,不同转型方式会伴随不同的问题产生。
    • 先介绍转型类型

    向上转型

    形式:父类 obj = new 子类() ;
    理解为将实例化的子类对象赋值于父类类型变量obj

    这就是向上转型操作。
    举例:
    学生和人,将学生转型为人,这没问题,学生是人

    向下转型

    形式:子类 obj = new 父类() ;
    理解为将实例化的父类对象赋值于子类类型变量obj

    但是将人转型为学生,所有人人都是学生。这个说法肯定有问题的。
    结论:可实例化的类,父类总是比子类抽象,

    但是可以强制类型转换将父类对象转换为子类对象。

    两种转型实验分析

    完整代码,向下转型

    package com.test;
    class Person{
    	Person(){
    		System.out.println("父类构造" + Person.class.hashCode());
    		}
    	void m(){
    		System.out.println("父类m方法执行");
    	}
    }
    class Students extends Person {
    	Students(){
    			System.out.println("子类构造" + Students.class.hashCode());
    	}
    	void n(){
    		System.out.println("子类n方法执行");
    	}
    }
    public class Test {
    	public static void main(String[] args) {										
    //		-------------分割-------------- 
    		//实例化子类,父类指向
    		Person p_2 = new Person();
    		//实例化父类,子类指向
    		try {
    			Students s_2 = (Students)p_2;
    			s_2.n();			//强制类型转换了之后再调用子类方法
    			s_2.m();			//父类方法调用
    		}catch(Exception c){
    			c.printStackTrace();
    		}					
    	}
    }
    

    运行结果
    在这里插入图片描述
    部分代码,向上转型:

    public class Test {
    	public static void main(String[] args) {										
    //		-------------分割-------------- 
    		//实例化子类,父类指向
    		Person p_2 = new Students();
    		//实例化父类,子类指向
    		Students s_2 = (Students)p_2;
    		s_2.n();
    		s_2.m();
    	}
    }
    

    结果
    在这里插入图片描述
    结果分析

    1. 出现了ClassCastException即类强制类型转换异常
      父类虽然强制转换成为了子类,但是在父类与子类的属性、方法体中存在的差异用强制转换是始终解决不了的。由此Java给出了instanceof操作符(见下文)先来判断父子类的对象。
    2. 只执行了父类的构造方法,强制类型转换了之后再调用子类方法无效。
    3. 向下转型需要谨慎使用
    4. 向上转型没出问题,验证子类转型父类(将一个具体的类变得抽象起来,因此这也使得这样的一个类型转换更安全)

    Java的多态为何可以由子类实例化父类?: https://www.zhihu.com/tardis/landing/360/ans/573791530?query=Java%E7%9A%84%E5%A4%9A%E6%80%81%E4%B8%BA%E4%BD%95%E5%8F%AF%E4%BB%A5%E7%94%B1&mid=799cee2b148c5e899263e45acac3326e&guid=C17C0F57B580A06F6D196A2D3DFF34FC.1581235349790.

    instanceof操作符判断对象类型,为向上转型服务或作单纯判断

    用途:判断父类是否为子类对象的实例

    语法格式:

    某类对象的引用 instanceof 某个类
    upobject instanceof ExampleClass

    实例:

    package com.test;
    class Person{
    }
    class Students extends Person {
    }
    public class Test {
    	public static void main(String[] args){
    		Person p_1 = new Person();
    		Students s_1 = new Students();
    		System.out.println(p_1 instanceof Students);
    		System.out.println(s_1 instanceof Person);
    	}
    }
    

    结果:
    在这里插入图片描述

    展开全文
  • c# 对象类型转换,包括时间转换、string 和int转换等
  • Java对象类型转换

    千次阅读 2021-10-19 21:42:08
    Java对象类型转换 对象类型转换,是指存在继承关系的对象,不是任意类型的对象,分别是向上转型(upcasting)和向下 转型(downcasting)。 (1)向上转型:父类引用指向子类对象为向上转型。 1.语法格式如下: ...

    Java对象类型转换

    对象类型转换,是指存在继承关系的对象,不是任意类型的对象,分别是向上转型(upcasting)和向下 转型(downcasting)。
    (1)向上转型:父类引用指向子类对象为向上转型。
    1.语法格式如下: fatherClass obj = new sonClass();
    ·fatherClass 是父类名称或接口名称,obj 是创建的对象,sonClass 是子类名称。
    ·向上转型就是把子类对象直接赋给父类引用,不用强制转换。
    2.使用向上转型可以调用父类类型中的所有成员,不能调用子类类型中特有 成员,最终运行效果看子类的具体实现。
    (2)向下转型:与向上转型相反,子类对象指向父类引用为向下转型。
    1.语法格式如下:sonClass obj = (sonClass) fatherClass;
    fatherClass 是父类名称,obj 是创建的对象,sonClass 是子类名称。
    2.向下转型可以调用子类类型中所有的成员,
    3.不过需要注意的是如果父类引用对象指向的是子类对象,那么在向下转型 的过程中是安全的也就是编译是不会出错误。
    4.但是如果父类引用对象是父类本身,那么在向下转型的过程中是不安全 的,编译不会出错,但是运行时会出现我们开始提到的 Java 强制类型转 换异常,一般使用 instanceof 运算符来避免出此类错误。

    例子1:

    Father f1 = new Son(); // 这就叫 upcasting (向上转型) 
    // 现在f1引用指向一个Son对象 
    Son s1 = (Son)f1; // 这就叫 downcasting (向下转型) 
    // 现在f1还是指向Son对象 
    

    例子2:

    Father f2 = new Father(); 
    Son s2 = (Son)f2; // 出错,子类引用不能指向父类对象 
    

    因为f1指向一个子类对象,Father f1 = new Son();
    子类s1引用当然可以指向子类对象了。
    而f2 被传给了一个Father对象,Father f2 = new Father();
    子类s1引用不能指向父类对象。

    展开全文
  • C# 对象类型转换

    千次阅读 2016-08-03 17:24:36
    C# 对象类型转换

    在日常开发时,经常需要将对象从一种类型转换为另一种类型。CLR允许将对象转换为它的(实际)类型或者它的任何基类型。

    C#不要求任何特殊语法即可将对象转换为它的任何基类型,因为向基类型的转换被认为是一种安全的隐式转换。然而,将对象转换为它的某个派生类型时,C#要求开发人员只能进行显式转换,因为这种转换可能在运行时失败。可以理解为:父类强制转换成子类,子类隐式转换成父类

        internal class Employee
        {
        }
    
        class Program
        {
            static void Main(string[] args)
            {
            // 子类隐式转换成父类,不需要转换
            // 因为new返回一个Employee对象,而Object是Employee的基类
            Object o = new Employee();
            // 子类可以自动转父类 可以这么理解把子类的实例em的地址赋值给了o1, o1的地址就是em的地址
            // 这时就可以调用Employee 类的方法,点出Employee 类的属性
            Employee em = new Employee();
            Object o1 = em;
    
                // 父类强制转换成子类, 需要转换
                // 因为Employee派生自Object
                Employee e = (Employee)o;
            }
        }

    在运行时,CLR会检查转型操作,确定总是转换为对象得实际类型或者它的任意类型。下面的代码虽然能通过编译,但会在运行时抛出InvalidCastException异常:

        internal class People
        {
        }
    
        internal class Employee : People
        {
        }
    
        internal class Manager : Employee
        {
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                // 创建实例的时候没有将父类引用到子类对象,是无法转换的
                // PromoteEmployee不能运行成功
                People p = new People();
                PromoteEmployee(p);
    
                // 创建实例的时候将父类引用到子类对象,是可以转换的
                // PromoteEmployee能运行成功
                People p1 = new Employee();
                PromoteEmployee(p1);
    
                // Manager"属于"(IS-A)Employee对象
                // PromoteEmployee能运行成功
                Manager m = new Manager();
                PromoteEmployee(m);
    
                // DateTime不是从Employee派生的
                // PromoteEmployee不能运行成功
                DateTime newYears = new DateTime(2011, 10, 1);
                PromoteEmployee(newYears);
            }
    
            static void PromoteEmployee(Object o)
            {
                // 编译器在编译时无法准确地获知对象0引用的是什么类型,因此允许代码通过编译
                // 但在运行时,CLR知道了o引用的是什么类型(在每次执行转型的时候)
                // 所以它会核实对象的类型是不是Employee或者从Employee派生的任何类型
                Employee e = (Employee)o;
            }
        }

    使用C#的is和as操作符来转型
    在C#语言中进行转换的另一种方式是使用is操作符。is检查对象是否兼容于指定类型,返回Boolean值true或false。注意,is操作符永远不抛出异常,例如以下代码:

            static void Main(string[] args)
            {
                Object o = new Object();
                Boolean b1 = (o is Object);    //True
                Boolean b2 = (o is Employee);  //False
                Boolean b3 = (o is Nullable);  //False
            }

    is操作符通常像下面这样使用:

            static void Main(string[] args)
            {
                Object o = new Employee();
                if( o is Employee )
                {
                    Employee e = (Employee)o;
                }
            }

    在上诉代码中,CLR实际检查两次对象类型。is操作符首先核实o是否兼容于Employee类型。如果是,在if语句内部转型时,CLR再次核实o是否引用一个Employee。CLR的类型检查增强了安全性,但无疑会对性能造成一定的影响。这是因为CLR首先必须判断变量(o)引用的对象的实际类型。然后CLR必须遍历继承层次结构,用每个基类型去核对指定的类型(Employee)。由于这是一个相当常用的编程模式,所以C#专门提供了as操作符,目的就是简化这种代码的写法,同时提升其性能。

            static void Main(string[] args)
            {
                Object o = new Employee();
                Employee e = o as Employee;
                if(e != null)
                {
    
                }
            }

    在这段代码中,CLR核实o是否兼容于Employee类型;如果是,as放回对同一个对象的非null引用。如果o不兼容于Employee类型,as返回null。as操作符永远不抛出异常。注意,as操作符造成CLR只校验一次对象类型。if语句只检查e是否为NULL;这个检查的速度不校验对象的类型快得多。

    测试代码:

    namespace ConsoleApplicationTest
    {
        internal class B{}
    
        internal class D : B{}
    
        class Program
        {
            static void Main(string[] args)
            {
                Object o1 = new Object(); //OK
                Object o2 = new B(); //OK
                Object o3 = new D(); //OK
                Object o4 = o3; //OK
                B b1 = new B(); //OK
                B b2 = new D(); //OK
                D d1 = new D(); //OK
    
                B b3 = new Object(); //编译时错误,正确:Object b3 = new B();
                D d2 = new Object(); //编译时错误,正确:Object b3 = new D();
    
                B b4 = d1; //OK,子类可以自动转父类
                D d3 = b2; //编译时错误,正确:D d3 = (D)b2;
                D d4 = (D)d1; //OK
                D d5 = (D)b2; //OK
    
                D d6 = (D)b1; //运行时错误,创建实例的时候没有将父类引用到子类对象
                B b5 = (B)o1; //运行时错误,创建实例的时候没有将父类引用到子类对象
                B b6 = (D)b2; //OK,创建实例的时候将父类引用到子类对象
            }
        }
    }
    展开全文
  • python对象类型转换

    千次阅读 2021-01-14 06:30:42
    我一直在尝试搜索如何在python中传递对象引用,并像Java一样对其进行类型转换,但没有成功。我不知道这个话题是否存在。我的问题是必须将对象引用传递给类构造函数。但我不知道如何将引用类型转换对象。在java中,...
  • 主要介绍了C++ 中类对象类型转化的实例详解的相关资料,这里提供实例帮助大家学习理解这部分内容,需要的朋友可以参考下
  • c++ void* 指针与对象类型转换

    千次阅读 2021-11-12 16:00:29
    void * v; std::string *str = new std::string("苹果");...//对象类型转换为void指针 v = str; //void指针转换为对象指针 std::cout<<*static_cast<std::string *>(v)<<std::endl;
  •  简单理一下上面的类型转换过程:在第二个callA()方法时,传递给该方法的是一个B类型的对象。由于callA函数所接收的是一个A类型的对象,所以这里进行了一次类型转化(子类型对象转换为父类型对象)。接下来到了if...
  • js的类型转换——对象类型转换

    千次阅读 2020-07-03 23:42:33
    js的类型转换 js是一种弱类型语言,不必像强类型语言那样必须表明类型;这种不必表明类型使得js使用上更便捷但也使js丢失部分... 需要额外说明的是对象类型的自动转换规则:对象不像其它基础类型可以比较直观的转换
  • RTTI(Run-Time Type Identification) 运行时类型识别,最先出现在C++里,引入这个机制是为了让程序在运行时能根据基类的指针或引用来获得该指针或引用所指的对象的实际类型。 Java中的RRTI则是源于《Thinking in ...
  • * 而一个父类对象类型一般是不能转换为子类对象使用的。因为子类继承与父类,所以说子类中的 * 一些数据成员和方法父类中未必会有,但如果是一个父类对象引用实际引用的是一个子类对象, * 则可以强制将这个父类...
  • NULL 博文链接:https://yuhuiblog695685688425687986842568269.iteye.com/blog/2396139
  • 将字符串类型转换对象类型:JSON.parse(参数) 将对象数据类型转换为字符串数据类型:JSON.stringify(参数)
  • //作用:将任意类型对象内容转化为JSON格式 //参数:一个高级引用类型对象 Student对象,。。。 public static String jsonObject(Object obj){ Class classFile = null; Field fieldArray[] = null; ...
  • 所以我用了下面的代码^{pr2}$现在,这是正确的,但我的日期转换对象类型。我读到here在Python中,日期是对象。但我想用redshift将我的最终数据帧写成一个表,所以我需要将日期列定义为python数据...
  • 对象的强制类型转换

    千次阅读 2018-07-21 13:35:13
    我们以前说过,将一个类型强制转换成另外一个类型的过程被称为类型转换。Java程序设计语言提供了一种专门用于进行类型转换的表示法。例如: double X = 3.405; int nx = (int) x; 将表达式x的值转换成整数类型,...
  • java对象类型转换

    2018-11-05 10:20:05
  • redis存取复杂Object对象类型转换

    千次阅读 2020-11-09 10:33:56
    set redisUtil.set(cache_key, JSON.toJSONString(user), 30*3); get User user= JSON.parseObject((String)redisUtil.get(cache_key),User.class);
  • 存储类型(数据对象名) 但需要我们注意的是,有一些存储类型的转换会影响到数据处理结果的精度,例如将双精度类型转换为整数类型的时候,R会自动将小数部分省略,因此容易造成数据处理结果的误差。 同时,数据对象并...
  • Swift 对象类型转换

    千次阅读 2015-08-28 15:13:57
    Swift 中对象是可以转换的,应为面向对象就会涉及继承,子类,父类等等 有几点规则我们先说一下 子类对象可以直接转换为父类对象的 父类对象可以有条件的转换为子类对象,这个我们下边在讲 首先我们创建三个类 人 ...
  • Flutter中map对象强制类型转换

    千次阅读 2019-12-10 14:49:56
    list.map<Widget>((item){}).toList();
  • java继承 对象类型转换 实例代码java继承 对象类型转换 实例代码java继承 对象类型转换 实例代码
  • 然后调用func1()方法 ,这时调用的是传过来的地址所指向内存空间中的func1()方法,而传过来的虽然是A类型的引用,但是该引用指向的内容中存储的是B类型对象,所以最终调用 的是B类型的func1()方法。...
  • C#把对象类型转化为指定类型,C#通用类型扩展方法类
  • java-对象转换

    2022-03-21 18:58:23
    包括自动类型转换和强制类型转换。不再赘述。 二、对象的转换 1.原因:类之间的继承性 2.对象转换(造型)包括:自动转换和强制转换。 3.自动转换(向上转换)up casting: (1)子类对象可以自动转换为超类...
  • java中对象类型转换

    千次阅读 2018-07-24 13:30:50
    在多态中涉及到将子类对象当做父类对象使用的情况,例如下边两行: Animal dog=new Dog(); Animal cat=new Cat(); 将子类对象当做父类对象使用不需要任何显式的声明,但是需要注意的是,有些时候不能通过父类...
  • C++里,对象类型转化问题是需要严加注意的一个问题,包括隐式转换,强制转化,旧式转化等种类,需要加以总结。本篇文章概括总结类型转化问题,并侧重于类型的隐式转换问题。关于强制转换的详细的内容放在下篇文章中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,751,446
精华内容 700,578
关键字:

对象类型转换

友情链接: 17 Paskaita.zip