资讯专栏INFORMATION COLUMN

java学习笔记 —— 自动转换与强制转换

AlienZHOU / 2070人阅读

摘要:引用数据类型转换由的继承和向上转型,子类可以很自然地转换为父类对象,即父类类型可以直接引用子类对象,但是子类类型不能直接引用父类对象,需要进行强制转换。但是将功能较弱的类型父类强制转功能较强的对象子类时,就不一定可以行了。

1、引用数据类型转换:

由java的继承和向上转型,子类可以很自然地转换为父类对象,即父类类型可以直接引用子类对象,但是子类类型不能直接引用父类对象,需要进行强制转换。子类比父类拥有更多的属性和更强的功能,这个时候我们使用功能较弱的类型(父类)引用功能较强的对象(子类),这是可行的。但是将功能较弱的类型(父类)强制转功能较强的对象(子类)时,就不一定可以行了。

向上转型,子类对象将引用赋予父类类型, java允许一个对象可以不被其对应的类型所引用,而被其父类类型引用,从而可以使用其父类类型,父类引用无法调用子类对象中父类没有的方法,向上转型会有子类特性丢失。如:father.fat(),father中只能调用fat()方法,而无法调用so()方法。若需要使用其原对象特性,这时就需要向下转型了,用一个它本身类型的变量来引用它。

向下转型是可以成功的,如:(Son)father,①中的向下转型失败是因为father本身的对象是Father,强制转换会使作用域溢出(ClassCastException:当前者的域小于后者的时候出现),而②中father本身就是Son对象,(Son)father只是让其恢复本身特性,所以是可以成功的。但是说到底父类对象还是无法转换为子类所引用。父类引用可以指向子类对象,但是子类引用却不能指向父类对象。

当我们用一个类型的构造器构造出一个对象时,这个对象的类型就已经确定的,也就说它的本质是不会再发生变化了。如:father被赋予的是Son类的对象,所以father调用的fat()方法是Son对象中的fat()方法,Son对象即使被赋予给了father类型,但其本身还是Son对象,调用的方法还是原对象中的方法。

public class Father {

    public void fat(){
        System.out.println("I`m father");
    }
}

public class Son extends Father {

    public void fat(){
        System.out.println("I`m a father of my son");
    }
    
    public void so() {
        System.out.println("I`m son");
    }
}

public class TypeStrong {

    public static void main(String[] args) {
        
        Son son = new Son();
        Father father = son;//向上转型,父类引用指向了子类对象,此时子类对象的类型为父类引用的类型
        
        father.fat();//只能调用fat()方法,无法调用so()方法,且fat()输出为:I`m a father of my son
        father = (Son) father;//依然无法调用so()方法,因为father为Father类型
        ((Son) father) .so();//终于可以调用了...
        
//        Father father2 = new Father();
//        Son son2 = (Son) father2;//①运行出错,ClassCastException,父类对象不能为子类的类型引用
        Son son2 = (Son) father;//②运行成功,向下转型,将原本父类引用赋予到子类引用上,当然此时还是子类对象为子类的类型引用
        
    }
    
}
2、基本数据类型转换:

将一种类型的数据赋给另外一种类型变量时,满足下列两种要求将执行自动类型转换:1.两种类型是兼容的2.目的类型的范围比来源类型大

数值类基本数据类型按照范围大小可分为:byte,short,char,int,long,float,double

数值类数据类型和字符类数据类型、布尔类数据类型不兼容,字符类数据类型和布尔类数据类型互相也不兼容。

注意:

byte、short、char类型进行 + 操作,最后得出的结果为int数据类型

字符类数据类型与数值类数据类型进行 + 操作,最后得出的结果为字符类数据类型

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71087.html

相关文章

  • Java学习笔记2-基本数据类型

    摘要:对象数组都是引用数据类型。低高数据类型转换必须满足如下规则不能对类型进行类型转换。强制类型转换条件是转换的数据类型必须是兼容的。声明变量的基本格式如下格式说明为数据类型。但为了对类的使用者可见,大多数静态变量声明为类型。 变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。 内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。 因此,...

    ThinkSNS 评论0 收藏0
  • Java零基础入门笔记|原来学Java可以这么简单

    摘要:刚开始学习的时候,可能是一头雾水,不知道从何学起。这个教程总体来说就像列文虎克教学,细到极致,妙到毫巅。适合绝对零基础的,每个知识点掰开了揉碎了讲解。 刚开始学习java的时候,可能是一头雾水,不知道从何学起。还有很多Java小白,在刚自学Java的时候玩命的学习,玩命的记住Java原理,天天早上五点起床背Java的一些英...

    2bdenny 评论0 收藏0
  • Java各种数据类型,自己学习写的笔记!!!

    摘要:局部变量声明在函数内部的变量。在作用域范围内不能出现命名冲突。 java编程规范: 1.良好的标识符的命名 保留字不能作为标识符命名: class、public、static..., goto,const 区分大小写:helloWorld、HelloWorld 2.良好的注释习惯 3.良好的缩进:没遇到一个代码块缩进一次(一个tab键) 变量:代...

    stefanieliang 评论0 收藏0
  • Java编程思想》笔记3.操作符

    摘要:自动拆箱用赋值运算符把一个包装类赋值给一个基本类型变量,或者是在包装类进行数值运算时。指数计数,表示的幂按位操作符可以把值看成单比特值对待,的操作相同,但是不能用于布尔值。移位操作符高位包括符号位舍弃,低位补零。 点击进入我的博客 3.1更简单的打印语句 System.out.println(imbug); 通过编写一个小类库,并通过import static该方法来实现简化打印(基...

    wpw 评论0 收藏0
  • 1、变量 2、运算符

    摘要:位置的使用运算符后置时,先使用变量原有值参与运算操作,运算操作完成后,变量的值自增或者自减,运算符前置时,先将变量的值自增或者自减,然后使用更新后的新值参与运算操作。 1.JRE:是Java语言的运行环境,它包含了Java虚拟机,也就是JVM,同时还包含了Java语言运行需要的核心类库。对于这个类库,大家先理解为资料库就行,后面学完面向对象,你就明白了。JDK:是Java语言的开发工具...

    betacat 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<