Java向上转型与向下转型

    • 1.1什么是向上转型?
  • 1.2为什么要向上转型

  • 二、向下转型

    • 2.1什么是向下转型?
  • 2.2为什么要向下转型?

  • 2.3不安全的向下转型:编译正常,运行报错

  • 2.4错误的向下转型:编译正常,运行报错

  • 三、补充知识点(intanceof)


一、向上转型

=====================================================================

1.1什么是向上转型?


把子类对象直接赋给父类引用叫向上转型(upcasting),向上转型不用强制转型。

也就是说,父类引用可以自动地包装子类对象。例如:Student类 继承了 Person 类

Person person = new Student();

1.2为什么要向上转型


优点:

  • 我们不必知道正在处理的对象的确切类型,这一切都交给多态处理即可;

  • 可以简化代码数量;

缺点:

  • 不能使用子类中特有的类

二、向下转型

=====================================================================

2.1什么是向下转型?


把指向子类对象的父类引用赋给子类引用叫向下转型(downcasting),要强制转型

2.2为什么要向下转型?


便于程序的扩展,可以调用更多子类的方法。

示例1

interface Ihuman

{

void eat();

}

class Man implements Ihuman

{

public void eat()

{

System.out.println(“man eat”);

}

public void run()

{

System.out.println(“man run”);

}

}

public class test {

@Test

public void testOR()

{

Ihuman human = new Man(); //向上转型成接口

human.eat();

Man m = (Man)human; //向下转型成子类,调用子类方法

m.run();

//能不能直接向下转型?

Ihuman human = new human(); //不能,不能实例化接口,报错

Man m = (Man)human;

m.run();

}

}

运行结果

运行结果:

man eat

man run

示例2

Animal animal = new Cat();

Cat cat2 = (Cat) animal;

cat2.sayAnimal();

cat2.sayCat();

为了安全,最好的向下转型方式为:

Animal animal = new Cat();

if(animal instanceof Cat){

Cat cat2 = (Cat) animal;

cat2.sayAnimal();

cat2.sayCat();

}

2.3不安全的向下转型:编译正常,运行报错


Cat cat = (Cat) new Animal();

cat.getHead();

cat.getEyes();

运行时报错如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值