java 介面之多繼承,類為什麼不可以多繼承
一 java 在編譯的時候就會檢查 類是不是多繼承,如果出現多繼承編譯不通過。但是在java 語法中介面是可以多繼承 的。
1 java 如果出現多繼承、父類中都有相同的屬性和name 值 子類如果使用父類的屬性和name 值 無法確定是哪一個父類的是 屬性和name值。
2 父類中如果相同的方法,並且子類並沒有覆蓋該方法。子類呼叫父類的時候 無法判斷是那個父類的方法。
二 介面 是可以多繼承的。介面(jdk 1.7 以下版本)裡面的方法並有實現,即使介面之間具有相同的方法仍然是可以的 幾個介面可以有想通的實現類和實現方法。而且介面 接口裡面的成員變數都是 static final的 有自己靜態域 只能自己使用。
介面的實現類可以有多個 。(java bean 註解注入) 一個介面(用多個實現類)被注入進來。呼叫方法的時候。會先依據bean 查詢那個 一樣的bean 。呼叫該實現類的方法。其次如過 實現類上都沒有註解的 bean 會按照載入的先後順序去呼叫的。
例子
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();
}
}
結果
test test interface
如果沒有 @Service("testService") 的註解
會輸出
test cash healthbillCash