假设现在存在一个父接口A和一个子接口B.
父接口A中有一个方法,子接口B中既有父接口的方法,又有自己的方法.
因此,如果实例化的是父接口,则只能调用父接口中的那个方法.
如果实例化的是子接口,则既能用父接口的方法,又能用子接口的方法.
需要注意的是:如果接口被多继承,
那么这个接口中的某个方法,其方法体是在不断变化的,
变化的内容由继承这个接口的子类决定.(如这里的funcB方法)
package prepare1; interface A {// 父接口 public void funcA(); } interface B extends A {// 子接口 @Override default void funcA() { System.out.println("父接口的方法"); } public void funcB();//这个方法的内容实际上是一直被变化的 } class C implements B { @Override public void funcB() { System.out.println("C类定义的子接口的方法"); } } class D implements B { @Override public void funcB() { System.out.println("D类定义的子接口的方法"); } } public class Test { public static void main(String[] args) { A a1 = new C();//实例化A接口对象 B b1 = new C();//实例化B接口对象 //A接口方法少,所以只能用一个 a1.funcA(); //B接口方法多,故既能用父接口的方法,也能用自己新定义的方法 b1.funcA(); b1.funcB(); A a2 = new D(); B b2 = new D(); a2.funcA(); b2.funcA(); b2.funcB(); } }