多态问题求助

tiancaixuchao2009 2013-07-30 01:59:31
class classA{
public void printv(){
System.out.println("classA");
}
}
class classB extends classA{
public void printv(){
System.out.println("classB");
}
}
public class Testtwo {

public static void main(String args[]){
classB objectB=new classB();
objectB.printv();
classA as=(classA)objectB;
as.printv();
}
}
////////////////
不理解为什么强制类型转换了classA as=(classA)objectB;输出的还是classB呢?
...全文
166 10 打赏 收藏 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
starnight_cyber 2013-07-30
  • 打赏
  • 举报
回复
因为classB 把从classA 中继承的printv()方法覆写了,虽然调用的还是这个函数printv(),但内容已经比变了。
liuc0317 2013-07-30
  • 打赏
  • 举报
回复
向上转型,多态中的一种,最张的结果 就是运行后的子类。
S117 2013-07-30
  • 打赏
  • 举报
回复
这不是向上转型吗?其实你不用强制转换,JVM也会帮你做的!
茫茫大海 2013-07-30
  • 打赏
  • 举报
回复
classA as=(classA)objectB; 就是as对象指向了objectB,都是同一个对象,当然调用哪个方法时还是ClassB的方法。
茫茫大海 2013-07-30
  • 打赏
  • 举报
回复
classA as=(classA)objectB;既然ClassB就ClassA的子类,那么可以隐式类型转换,不用显式类型转换吧,直接写成: classA as=objectB;
Ivan_333 2013-07-30
  • 打赏
  • 举报
回复
知道啥叫覆盖(重写)么,objectB 只有一个方法,你怎么转都没用
末日哥 2013-07-30
  • 打赏
  • 举报
回复
引用 3 楼 tiancaixuchao2009 的回复:
[quote=引用 1 楼 fudongrifdr 的回复:] 还是原来的配方,还是熟悉的味道,只是换了个包装
太抽象了[/quote] 你这不就是一个原生的多态吗,你不过是把隐式的向上转型显示表现出来了。
tiancaixuchao2009 2013-07-30
  • 打赏
  • 举报
回复
引用 1 楼 fudongrifdr 的回复:
还是原来的配方,还是熟悉的味道,只是换了个包装
太抽象了
loveofmylife 2013-07-30
  • 打赏
  • 举报
回复
打个比方,人是动物的子类,你把一个人强制转换成动物类型,调用这个人的speak,那么他说的是人话还是什么呢? 专业的说这个叫做override
末日哥 2013-07-30
  • 打赏
  • 举报
回复
还是原来的配方,还是熟悉的味道,只是换了个包装

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧