java强制转换后调用方法_java学习笔记 —— 自动转换与强制转换

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数据类型

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值