A a = new B(); 此时,new B() ==>已经变转换为 A的接口,所以调用不到其子对像B的方法。
A a = new B() 这里在后台其实做了一个类型转换已经把B类的对象转换成A类的对象了所以你调用不到B类的方法想了解这方面的东西,你可以看看C#高级编程第三版,其中有详细介绍自定义类型转换的内容. 就内存分配而言它和B b = new B()没什么区别,都是在堆栈上分配一个声明b,在堆上创建一个B类的对象然后把地址返回给b.
是的,如果B实现了Iksl的接口,而你Iksl ksl = new B 那么你就可以用ksl调用B的方法了,当然这是另外的问题了
你封箱了,所以只能调用封箱后对象类型的方法. 所有A的派生类都可以封箱成A的并不只是B一个.
A a = new B(); 此时,new B() ==>已经变转换为 A的接口,所以调用不到其子对像B的方法。 可以在转换回来: B b = (B)a; 然后就可以正常调用B的方法了。
此时,new B() ==>已经变转换为 A的接口,所以调用不到其子对像B的方法。
就内存分配而言它和B b = new B()没什么区别,都是在堆栈上分配一个声明b,在堆上创建一个B类的对象然后把地址返回给b.
所有A的派生类都可以封箱成A的并不只是B一个.
此时,new B() ==>已经变转换为 A的接口,所以调用不到其子对像B的方法。
可以在转换回来:
B b = (B)a;
然后就可以正常调用B的方法了。