Java B和A之间的差异<;B>;B

Java B和A之间的差异<;B>;B,java,types,Java,Types,假设B类扩展了A类,我想为B声明一个变量。什么更有效?为什么 bb 或 ab 两种声明都不比另一种更有效 但是ab并不声明类型b的引用,它声明类型A的引用,该类型是在类型b上模板化的 除非是泛型类,否则第二种形式是非法的。我认为这不是效率问题,而是用法问题。如果纯a对象不打算使用B,为什么您希望它是AB?使用BBA是使用B作为类型的模板类,例如: List是字符串列表,因此List将是B对象列表 WeakReference是对字符串的弱引用,因此WeakReference将是对B对象的弱引用

假设B类扩展了A类,我想为B声明一个变量。什么更有效?为什么

  • bb
  • ab

  • 两种声明都不比另一种更有效

    但是
    ab
    并不声明类型
    b
    的引用,它声明类型
    A
    的引用,该类型是在类型
    b
    上模板化的


    除非是泛型类,否则第二种形式是非法的。

    我认为这不是效率问题,而是用法问题。如果纯a对象不打算使用B,为什么您希望它是
    AB

    使用
    BB
    A
    是使用
    B
    作为类型的模板类,例如:

    • List
      是字符串列表,因此
      List
      将是
      B
      对象列表

    • WeakReference
      是对字符串的弱引用,因此
      WeakReference
      将是对
      B
      对象的弱引用


      • 您的声明不会做同样的事情。第一个声明类型为
        B
        ,而第二个声明类型为
        A
        ,其中T是一个类型参数,其插槽由类型
        B
        填充。如果B扩展了A,那么我将尽可能多地使用类型A

        A小部件=新B()


        这降低了代码的其他部分对您的实现可能做出的假设

        您混淆了两个不同的概念

        class B extends A {
        
        }
        
        表示
        B
        A

        如果您有类似于
        A
        的内容,则表示您的类
        A
        定义为

        class A<T> {
        
        }
        
        因此,如果
        T
        取值
        String
        ,则表示字符串列表

        所以
        A
        并不意味着
        B扩展了A


        你应该使用
        B B

        你的解释清楚了别人指的是什么。谢谢不管怎样,谢谢大家。
        class List<T> {
        
        }