有一个父类A,还有一个继承他的子类B
新建实例的时候这两中定义有什么区别?
A a=new B()
B a=new B()

解决方案 »

  1.   

    区别是存在的,但是从对象的角度来说,都是B对象.这个是没有区别的.区别的是引用他们的变量类型不一样,就像对于同样的对象,从不同的视角,观点观察它们.比如说Bird : IFly, IEat (不要注意这个继承的意义是不是恰当)IFly f = new Bird
    IEat e = new Birdf和e的观察侧重不一样而已.
    f重视的是不是一个能飞的东西.
    e重视的那是不是一个能吃东西的东西.
      

  2.   

    在编译的时候,A a的使用范围可能受到一些限制,
    当一旦通过了编译运行的时候,A a与B a 功能是一样多的.
      

  3.   

    A a=new B()
    B a=new B()
    他们的区别的是A a=new B()产生多态,而B a=new B()不产生多态
    这样在使用B类中的方法时会产生不同的情况建议你多了解一下多态,覆盖的定义,你就自然明白了
      

  4.   

    叫一个男人来做一件男人该做事情,B a=new B()
    而你非要叫一个女人把她作为一个男的去做这件事情,也就是  A a=new B()
      

  5.   

    楼上的想表达的意思很恰当,但是却说错了.
    引用变量类型不一样有很多时候是为了提高程序的通用性,比如你定义一个方法
    method(InputStream in),你在用的时候传入FileInputStream的实例或者其它输入流的实例都是可以的,但是如果你不在定义这个方法时将其参数设置为InputStream ,你很可能为了对不同的输入流实现相同的功能时都需要重新定义方法,这样便造成了很多不必要的麻烦.这种做法在实际中是经常应用的
      

  6.   

    A a=new B()
    B a=new B()
    推荐第一种写法;一般定义的对象最好是接口或者抽象类,即类放大
      

  7.   

    回复人:crazycy(崔毅,blog:http://www.blogjava.net/crazycy/) ( 一星(中级)) 信誉:101  2006-10-07 19:11:00  得分:0

    A a=new B()
    B a=new B()
    推荐第一种写法;一般定义的对象最好是接口或者抽象类,即类放大
    --------------------------------------这个无所谓推荐不推荐吧,按需使用哈。
    要不然,推荐大家一律 Object a = new A(),呵呵~
      

  8.   


    A a=new B()是A的引用变量!
    有重写和重载在
    多态
    继承
    方面有区别