java的转型

package com.scjpExam;
class Scott{
public void prints(Scott s){
System.out.println("Scott!");
}

}

public class Group extends Scott {


public void prints(Group g ) {
// TODO Auto-generated method stub
System.out.println("Group!");
}
public static void main(String[] args ){
Scott s = new Group();
s.prints(new Group());


}


}
想一下子上面这个Code的输出是多少呢?
S前面定义的是Scott类型的..虽然实现的是Group();但是会发生一个向的转型。转为Scott类型的对象。所以它会调用Scott对象的prints()方法
结果:Scott
### Java 中的类型转换与转型机制 Java 中的类型转换分为两种形式:基本数据类型的转换和对象类型的转换。这两种转换机制在实现和使用上各有特点,且都与 Java 的类型系统和运行时安全机制密切相关。 #### 基本数据类型的类型转换 Java 支持两种基本数据类型之间的转换:自动类型转换和强制类型转换。自动类型转换发生在将低精度的数据类型赋值给高精度的数据类型时,例如将 `int` 赋值给 `long`。这种转换是安全的,不会导致数据丢失,因此 Java 允许它自动进行。相反,当尝试将高精度类型赋值给低精度类型时,必须使用强制类型转换,否则编译器会报错,以防止潜在的数据丢失风险。例如,从 `long` 到 `int` 的赋值需要显式地进行类型转换。 ```java int a = 10; long b = 100L; b = a; // 可以通过编译 a = (int) b; // 必须进行强制类型转换 ``` #### 对象类型的类型转换 对象类型的转换涉及类的继承关系,主要包括向上转型和向下转型。向上转型是指将子类对象赋值给父类引用,这是自动完成的,不会引发任何问题,因为子类对象本质上也是父类对象的一种。然而,向下转型则相反,即将父类对象赋值给子类引用,这需要显式的类型转换,并且存在一定的风险。如果父类对象实际上并不是该子类的实例,则会在运行时抛出 `ClassCastException` 异常。 ```java Object obj = new String("Hello"); String str = (String) obj; // 正确的向下转型 ``` #### 类型转换的安全性和 JVM 的角色 Java 虚拟机 (JVM) 在类型转换的安全性方面扮演着重要角色。JVM 通过类加载机制确保了不同类加载器加载的相同类被视为不同的类型,从而避免了由于类加载器差异引起的类型混淆问题。当尝试在不兼容的类之间进行转换时,JVM 将抛出 `ClassCastException`,以此来维护程序的类型安全。 ```java Object obj = new Integer(10); String str = (String) obj; // 运行时抛出 ClassCastException ``` #### 类型转换的应用场景 类型转换在 Java 编程中有多种应用场景。例如,在集合框架中,早期版本的 Java 使用 `Object` 类型来存储各种对象,因此从集合中取出对象后需要进行向下转型。此外,类型转换也常用于多态性编程,即通过父类引用来调用子类的方法,这要求在特定时刻对父类引用进行向下转型以访问子类特有的方法和属性。 ```java List list = new ArrayList(); list.add("Hello"); String item = (String) list.get(0); // 从集合中取出并转型 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值