A a = new C(); a中不会有接口B的方法,但实际的new C()会有B接口的方法,用a来引用new C(); 不会有接口B的方法. 如果C c = new C(); c中有接口B的方法 此时如果A a = c;用a访问不会有接口B的方法 用哪个父类(或接口)看待子类(或接口的实现类)的实例(对象) 就只能看到父类的方法 如上述A a = new C(); C实现了A,那站在A的角度看待new C() new C() 就是一个A的实例,当然只能调用A的方法了 另外,如果子类中有重写父类的方法 父类的引用指向子类的实例(对象)的时候 当调用父类中某个方法(这个方法在子类中被重写override) 那么会调用子类重写的方法; 这种情况下,依然符合上面所说. 站在谁的角度看new出来的对象,那它就是谁 只能调用这个角度看待时的访法;
不可以调用B的方法,因为你已经把他定义为A了,那么C里面有关B的东西都无法使用。