java转型小结

百度看到的,觉得总结的很全面,记录一下

原文地址:https://baijiahao.baidu.com/s?id=1617076999224722021&wfr=spider&for=pc

基本数据类型的转换暂不讨论

1.在引用数据类型中,只有有继承关系的类型才能进行类型转换;

也就是在一条继承链上的

2.类型转换只是转换看待对象的引用的类型,对象本身没有也不可能参与转换;

引用的指向,引用具体代表哪一个类型    对象还是那个对象

3.父类引用可以自动指向子类对象,但只能访问和调用到来自于父类的属性和行为;

就是父子类共有的部分

4.子类的引用不能指向父类或其它子类对象,就算强转也会导致运行失败并抛出ClassCastException;

编译可以通过,运行时会报错。换句话说就是父类或其他子类对象无法强制转换为当前子类对象。

例如:父类是宠物类Pets 子类Dog和Cat都继承宠物类

我们无法将宠物类型或猫类型强制转为狗类型

    Pets p=new Pets();
    Dog d=(Dog)p;

运行时会报错

Cat c=new Cat();
    Dog d=(Dog)c;

编译期报错

 

Pets p=new Dog();//子类引用自动赋给父类引用,没有问题。属于向上转型,不过会丢失部分信息,此时只能调用宠物类和狗类都有的属性和方法
    Dog d=(Dog)p;//强制类型转换,向下转型,不安全;不过如果成功,就会具有狗类的所有属性和方法信息。

不安全的原因是宠物类的引用可能指向其他子类比如猫类

Pets p=new Cat();

Dog d=(Dog)p;//编译器没有任何问题;运行时进行类型信息绑定得知p指向猫类会报运行时异常

为了防止这种情况,可以在强制转型时进行类型检查

if(p instanceof Dog){

     Dog d=(Dog)p;

}

5.把父类引用赋给子类引用,语法上必须使用强制类型转换,要想运行也成功还必须保证父类引用指向的对象一定是该子类对象(最好使用instanceof判断后,再强转)。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java多线程是指在一个Java程序中同时执行多个线程,每个线程都是独立的执行流。Java中创建线程的方式有三种:继承Thread类、实现Runnable接口和实现Callable接口。每种方式都有其优缺点。 1. 继承Thread类创建线程类: ```java class MyThread extends Thread { public void run() { // 线程执行的代码 } } // 创建线程对象并启动线程 MyThread thread = new MyThread(); thread.start(); ``` 优点:简单易用,可以直接重写Thread类的run()方法。 缺点:由于Java不支持多继承,继承了Thread类就无法再继承其他类。 2. 实现Runnable接口创建线程类: ```java class MyRunnable implements Runnable { public void run() { // 线程执行的代码 } } // 创建线程对象并启动线程 Thread thread = new Thread(new MyRunnable()); thread.start(); ``` 优点:避免了单继承的限制,可以继续继承其他类或实现其他接口。 缺点:需要额外创建Thread对象,并将Runnable对象作为参数传递给Thread对象。 3. 实现Callable接口创建线程类: ```java class MyCallable implements Callable<Integer> { public Integer call() throws Exception { // 线程执行的代码 return 0; } } // 创建线程池对象 ExecutorService executor = Executors.newFixedThreadPool(1); // 提交Callable任务并获取Future对象 Future<Integer> future = executor.submit(new MyCallable()); // 获取线程执行结果 int result = future.get(); ``` 优点:可以获取线程执行的结果,并且可以抛出异常。 缺点:相对于前两种方式,使用Callable需要更多的代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值