java 是不容许使用 extends 去继承多个类的。java
public Class A 有 public int i=0, some() {i=1;} public Class B 有 public int i=0, some() {i=2;} public Class C 有 public int i=0, extends A,B
如今C实例化c,执行c.some(), i=?
不容许继承多类,就是为了不继承多父类,在调用相同方法或者构造函数时赋值同一个成员变量时出现此类问题ide
接口是能够多继承的。接口(jdk 1.7 如下版本)里面的方法并有实现,即便接口之间具备相同的方法仍然是能够的,几个接口能够有相同的实现类和实现方法。并且接口的成员变量都是 static final的,有本身静态域,只能本身使用。函数
另外,接口的实现类能够有多个 。(java bean 注解注入) 一个接口(用多个实现类)被注入进来。调用方法的时候,会先依据bean 查找那个同样的bean ,调用该实现类的方法。其次,如过实现类上都没有注解的 bean ,会按照加载的前后顺序去调用的。 测试
例子 code
public interface TestService { public void a(); }
实现 继承
@Slf4j @Service("testService") public class TestInterfase implements TestService { @Override public void a() { log.info("test test interface"); } } @Slf4j public class HealthBillCashServiceImpl implements TestService { @Override public void a() { log.info("test cash healthbillCash"); } }
测试 接口
@SpringApplicationConfiguration(classes = Application.class) @WebAppConfiguration @Slf4j public class TestHealthPolicyService { private TestService testService;// 查找bean 的惟一性 @Test public void testASD() { HealthPolicyDO optionDO = new HealthPolicyDO(); testService.a(); } }
结果 io
test test interface
若是没有 @Service("testService") 的注解class
会输出 test
test cash healthbillCash
若是想多继承,怎么实现呢?
使用接口有时候有不少不方便的地方。好比咱们实现一个接口就必须实现它里面的全部方法。而有了内部类就不同了。它可使咱们的类继承多个具体类或抽象类。以下面这个例子:
//类一 public class ClassA { public String name(){ return "liutao"; } public String doSomeThing(){ // doSomeThing } } //类二 public class ClassB { public int age(){ return 25; } } //类三 public class MainExample{ private class Test1 extends ClassA{ public String name(){ return super.name(); } } private class Test2 extends ClassB{ public int age(){ return super.age(); } } public String name(){ return new Test1().name(); } public int age(){ return new Test2().age(); } public static void main(String args[]){ MainExample mi=new MainExample(); System.out.println("姓名:"+mi.name()); System.out.println("年龄:"+mi.age()); } } 复制代码
上边这个例子能够看出来,MainExample 类经过内部类拥有了 ClassA 和 ClassB 的两个类的继承关系。 而无需关注 ClassA 中的 doSomeThing 方法的实现。这就是比接口实现更有戏的地方。