他的类型是B,只是程序需要调用父类隐藏方法或作为参数等原因需要转换,就想你叫张三,你永远是张三,但你也是人类
需要调用父类隐藏方法或作为参数等原因需要转换。你还跟我回答了一个问题:就是既然这样做还是B类型,为什么还要把它的引用类型申明为A,不直接声明为B。只是能不能再详细一点。
@_珋: 被子类隐藏掉的方法,必须通过转化为父类才能方法。否则只能访问子类的方法
@56180825: 哦哦,懂了,谢谢。那如果前面是个接口呢?
IsomeInterface a=new B();
这个解释你看对不?B类继承了IsomeInterface这个接口,a对象只能调用IsomeInterface在B类实现的方法吗?
@_珋: 接口多数用于减少模块之间的耦合性,在很多设计模式中都用到。总的来说你的理解也是对的
@56180825: 非常感谢。
A a = new B()这句话分成两步:
B b =new B();
A a = b;
在 a=b,是B类型隐士转换为A,当然A应该是B的父类,而a是实际类型还是B。a,b他们实际是指向的同个对象。
简单一点 A a = new B() 说明A是B的父类
B b = new B()
b 和 a 是 B类型