class A{}
class B extends A{}A b=new B();
B b=new B();
这两种方法创建的对象b有什么区别么?

解决方案 »

  1.   

    当然不同的。
    A b=new B();
    这里的b生成的是A的实例,
    不能直接访问B的方法。
      

  2.   

    那A b=new B();
    和A b=new A();
    的区别又在哪呢?
      

  3.   

    没有区别的好吧这个问题我早就测试过了你看这个程序,测试一下执行的结果你据明白了
    class A {}class B extends A {
    public B() {
    System.out.println("你好!") ;
    }
    }public class test { public static void main(String[] args) {
    A b = new B() ;
                    B c = new B() ;
    }
    }
      

  4.   


    public class B extends A{
      public B() {
      }
      
      public void b(){}
      
      public static void main(String[] args){
        A a = new B();
        B b = new B();
        System.out.println(a instanceof B);
        System.out.println(b instanceof B);
      }
    }结果当然都是true了 ls的是这个意思吧。
    我说的不同是指
    b可以直接访问B的方法b,也就是b.b();
    但是a不能,必须要((B)a).b();lz的第二个问题 把上面实例化部分的代码替换一下就知道了,生成的对象不同了。
      

  5.   

    A   b=new   A(); // 创建类型为A的b,并将A的实例赋给b,没什么好说的
    B   b=new   B(); // 创建类型为B的b,并将B的实例赋给b,没什么好说的
    A   b=new   B(); // 创建类型为A的b,并将B的实例赋给b,虽然是b是B的实例,但只有A里的东西是可见的,也就是说B里的东西被隐藏了体会一下
    List list = new ArrayList();
    ArrayList list = new ArrayList();体会一下什么叫面向接口编成!
      

  6.   

    当然不同的。 
    A   b=new   B(); 
    这里的b生成的是A的实例, 
    不能直接访问B的方法。
      

  7.   

    这个问题是向上转型的问题A  b = new B();
    如果子类覆盖率父类的方法,那么调用的是子类的方法如果没有覆盖调用的是父类的方法   
    A b = new B()
    b b = new B()是不一样的,看thinking  in java 中的说的