关于类的使用请教:
public class A
{
}public class B extends A
{}A a=new B();
这样写有什么用吗?
为什么把a强制转化为class A 型的呢,而不是用B a=new B()这样声明和定义?通常在什么情况下这样使用呢,我刚接触请教一下大家。谢谢
public class A
{
}public class B extends A
{}A a=new B();
这样写有什么用吗?
为什么把a强制转化为class A 型的呢,而不是用B a=new B()这样声明和定义?通常在什么情况下这样使用呢,我刚接触请教一下大家。谢谢
别把C那套理论套过来
A a=(A)new B();// 这才是强转LZ先忽略现在问题,等你多看点基础知识,就明白了
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方法。
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方法。
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的区别吧?面向对象的语言会忽略这部分内容,而是将重点放在如何解决问题上,或许我不该将精力放在这个上面,本末倒置了也许
每个版本的JVM实现可能都不一样,所以这个没标准答案