java View转换类型_对象的类型转换

在多态的学习中,涉及到将子类对象当作父类类型使用的情况,例如下面两行代码:Animal an1=new Cat(); //将Cat 对象当作Animal 类型来使用

Animal an2=new Dog(); //将Dog 对象当作Animal 类型来使用

将子类对象当作父类使用时不需要任何显式地声明,需要注意的是,此时不能通过父类变量去调用子类中的某些方法,接下来通过一个案例来演示。//定义Animal 接口

interface Animal {

void shout(); // 定义抽象方法shout()

}

// 定义Cat 类实现Animal 接口

class Cat implements Animal {

// 实现抽象方法shout()

public void shout() {

System.out.println("喵喵……");

}

// 定义sleep()方法

void sleep() {

System.out.println("猫睡觉……");

}

}

// 定义测试类

public class Example {

public static void main(String[] args) {

Cat cat = new Cat(); // 创建Cat 类的实例对象

animalShout(cat); // 调用animalShout()方法,将cat 作为参数传入

}

// 定义静态方法animalShout(),接收一个Animal 类型的参数

public static void animalShout(Animal animal) {

animal.shout(); // 调用传入参数animal 的shout()方法

animal.sleep(); // 调用传入参数animal 的sleep()方法

}

}

编译程序报错

在main方法中,调用animalShout()方法时传入了Cat类型的对象,而方法的参数类型为Animal类型,这便将Cat对象当作父类Animal类型使用。当编译器检查到第29行代码时,发现Animal类中没有定义sleep()方法,从而出现编译程序报错的错误信息,报告找不到sleep()方法。由于传入的对象是Cat类型,在Cat类中定义了sleep()方法,通过Cat类型的对象调用sleep()方法是可行的,因此可以在animalShout()方法中将Animal类型的变量强转为Cat类型。将animalShout()方法进行修改,具体代码如下:public static void animalShout(Animal animal) {

Cat cat = (Cat) animal; //将animal 对象强制转换为Cat 类型

cat.shout(); //调用cat 的shout()方法

cat.sleep(); //调用cat 的sleep()方法

}

修改后再次编译,程序没有报错,运行结果:喵喵……

猫睡觉……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值