一 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