请教关于类的强制转换

whyuu 2010-11-22 03:39:51
关于类的使用请教:
public class A
{
}

public class B extends A
{

}

A a=new B();
这样写有什么用吗?
为什么把a强制转化为class A 型的呢,而不是用B a=new B()这样声明和定义?通常在什么情况下这样使用呢,我刚接触请教一下大家。谢谢
...全文
104 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
soli11722984 2010-11-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 whyuu 的回复:]

这就是著名的多态思想,比如这样:
class A{
void aaa(){
}
}
class B extends A{
void aaa(){
}
}
class C extends A{
void aaa(){
}
}
相当于B,C分别继承了A,并重写了aaa的方法。
A a=new B();
这样调用a.aaa()会自动调用B的aaa方法。
A a=new ……
[/Quote]

每个版本的JVM实现可能都不一样,所以这个没标准答案
whyuu 2010-11-23
  • 打赏
  • 举报
回复
这就是著名的多态思想,比如这样:
class A{
void aaa(){
}
}
class B extends A{
void aaa(){
}
}
class C extends A{
void aaa(){
}
}
相当于B,C分别继承了A,并重写了aaa的方法。
A a=new B();
这样调用a.aaa()会自动调用B的aaa方法。
A a=new C();
会自动调用C的aaa方法。

---------------------------------------------------------------------
我理解上面的多态思想,是想继续请教一下在这个思想的背后,子类和父类的存储空间是如何分布的?我想应该是在内部有相应的转换机制来管理这些:每当用户写成用B继承A的时候,内部的机制便会用B实例化A的对应部分。我是这么理解的。
也许这是java和c的区别吧?面向对象的语言会忽略这部分内容,而是将重点放在如何解决问题上,或许我不该将精力放在这个上面,本末倒置了也许
Jlins 2010-11-22
  • 打赏
  • 举报
回复
这就是著名的多态思想,比如这样:
class A{
void aaa(){
}
}
class B extends A{
void aaa(){
}
}
class C extends A{
void aaa(){
}
}
相当于B,C分别继承了A,并重写了aaa的方法。
A a=new B();
这样调用a.aaa()会自动调用B的aaa方法。
A a=new C();
会自动调用C的aaa方法。
mengyalizuopeng 2010-11-22
  • 打赏
  • 举报
回复
多态 ,向上转型。。。
皮皮虾向前冲 2010-11-22
  • 打赏
  • 举报
回复
lz该回去多看看 多态了。。这个是多态最基础的东东哦
mic47 2010-11-22
  • 打赏
  • 举报
回复
这就是著名的多态思想,比如这样:
class A{
void aaa(){
}
}
class B extends A{
void aaa(){
}
}
class C extends A{
void aaa(){
}
}
相当于B,C分别继承了A,并重写了aaa的方法。
A a=new B();
这样调用a.aaa()会自动调用B的aaa方法。
A a=new C();
会自动调用C的aaa方法。
soli11722984 2010-11-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 whyuu 的回复:]

我是这么理解的,让编译器分配一个class B这样结构和大小的内存区,然后将这个内存块的起始地址给a,不懂的是,如果B是继承A的,那么class B占用的内存空间应该会大于等于class A的内存空间,将a强制转换为class A 型后,会不会有一部分内存空间被砍掉了?
[/Quote]

别把C那套理论套过来
A a=(A)new B();// 这才是强转

LZ先忽略现在问题,等你多看点基础知识,就明白了
liqiangwaini 2010-11-22
  • 打赏
  • 举报
回复
这应该是一个子类实例父类的语句。
这样可以调用非子类的方法(属于父类).
whyuu 2010-11-22
  • 打赏
  • 举报
回复
我是这么理解的,让编译器分配一个class B这样结构和大小的内存区,然后将这个内存块的起始地址给a,不懂的是,如果B是继承A的,那么class B占用的内存空间应该会大于等于class A的内存空间,将a强制转换为class A 型后,会不会有一部分内存空间被砍掉了?
banalitylife 2010-11-22
  • 打赏
  • 举报
回复
advice:请阅读《java编程思想》
LuckyKingQi 2010-11-22
  • 打赏
  • 举报
回复
多态 一个类的多种实现形式!如果有方法你可以重写父类方法!这样实例就可以来调用你重写的方法!同理其他的类也可以重写方法父类的方法!所以同一个方法在不同类中有不同的实现形式!
sxww321 2010-11-22
  • 打赏
  • 举报
回复
keyword:类多态

62,614

社区成员

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

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