没有区别的好吧这个问题我早就测试过了你看这个程序,测试一下执行的结果你据明白了 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() ; } }
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的第二个问题 把上面实例化部分的代码替换一下就知道了,生成的对象不同了。
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();体会一下什么叫面向接口编成!
当然不同的。 A b=new B(); 这里的b生成的是A的实例, 不能直接访问B的方法。
这个问题是向上转型的问题A b = new B(); 如果子类覆盖率父类的方法,那么调用的是子类的方法如果没有覆盖调用的是父类的方法 A b = new B() b b = new B()是不一样的,看thinking in java 中的说的
A b=new B();
这里的b生成的是A的实例,
不能直接访问B的方法。
和A b=new A();
的区别又在哪呢?
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() ;
}
}
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的第二个问题 把上面实例化部分的代码替换一下就知道了,生成的对象不同了。
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();体会一下什么叫面向接口编成!
A b=new B();
这里的b生成的是A的实例,
不能直接访问B的方法。
如果子类覆盖率父类的方法,那么调用的是子类的方法如果没有覆盖调用的是父类的方法
A b = new B()
b b = new B()是不一样的,看thinking in java 中的说的