关于类的使用请教:
public class A
{
}public class B extends  A
{}A a=new B();
这样写有什么用吗?
为什么把a强制转化为class A 型的呢,而不是用B a=new B()这样声明和定义?通常在什么情况下这样使用呢,我刚接触请教一下大家。谢谢

解决方案 »

  1.   

    advice:请阅读《java编程思想》
      

  2.   

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

  3.   


    别把C那套理论套过来
    A a=(A)new B();// 这才是强转LZ先忽略现在问题,等你多看点基础知识,就明白了
      

  4.   

    这就是著名的多态思想,比如这样:
    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方法。
      

  5.   

    这就是著名的多态思想,比如这样:
    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方法。
      

  6.   

    这就是著名的多态思想,比如这样:
    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的区别吧?面向对象的语言会忽略这部分内容,而是将重点放在如何解决问题上,或许我不该将精力放在这个上面,本末倒置了也许
      

  7.   


    每个版本的JVM实现可能都不一样,所以这个没标准答案