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 方法的實現。這就是比接口實現更有戲的地方。