1. 程式人生 > >java 介面之多繼承,類為什麼不可以多繼承

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