面向对象的三大特性:封装、继承、多态。
多继承总结:
java 中类不允许多继承,即子类只能继承(extends)单个父类,但是可以实现(implements)多个接口
接口允许多继承,即一个接口可以继承多个接口;
原则:
a.类优先于接口。 如果一个子类继承的父类和实现的接口有相同的方法实现。 那么子类继承父类的方法
b.子类型中的方法优先于父类型中的方法。
类继承
子类只能继承(extends)单个父类,所以不存在多继承情况。
接口继承
实例:
1.接口继承多个父接口
注意:
若多个父接口的方法签名相同,但参数不同,则继承了两个方法,即多个父接口的默认方法不同, 隐式继承多个父接口默认方法,但是返回值不同,方法是相同的
接口1
/**
* @Description:被继承接口
* @author:Dxh
* @date:2018年1月4日
*/
public interface AnamalService {
void say();
}
接口2
/**
* @Description:被继承接口
* @author:Dxh
* @date:2018年1月4日
*/
public interface PersonService {
void say();
void spell();
}
接口3,继承接口1和2
/**
* @Description:去继承接口
* @author:Dxh
* @date:2018年1月4日
*/
public interface GradeService extends PersonService,AnamalService{
}
接口3的实现类
/**
* @Description:GradeService接口的实现类
* @author:Dxh
* @date:2018年1月4日
*/
public class GradeServiceImpl implements GradeService{
@Override
public void say() {
System.out.println("接口多继承,方法say()");
}
@Override
public void spell() {
System.out.println("接口多继承,方法spell()");
}
}
客户端
/**
* @Description:
* @author:Dxh
* @date:2018年1月4日
*/
public class Client {
public static void main(String[] args) {
GradeService serviceImpl = new GradeServiceImpl();//此处采用多态的方式
serviceImpl.say();
serviceImpl.spell();
}
}
输出:
接口多继承,方法say()
接口多继承,方法spell()
2.接口多层继承
接口3会继承接口2的默认方法,包括直接定义的默认方法, 覆盖的默认方法,以及隐式继承于接口1的默认方法。
接口1:
/**
* @Description:被继承接口
* @author:Dxh
* @date:2018年1月4日
*/
public interface AnamalService {
void say();
}
接口2继承接口1:
/**
* @Description:被继承接口
* @author:Dxh
* @date:2018年1月4日
*/
public interface PersonService extends AnamalService{
String say(String msg);
void spell();
}
接口3继承接口2:
/**
* @Description:去继承接口
* @author:Dxh
* @date:2018年1月4日
*/
public interface GradeService extends PersonService{
}
GradeService 的实现类:
/**
* @Description:GradeService接口的实现类
* @author:Dxh
* @date:2018年1月4日
*/
public class GradeServiceImpl implements GradeService{
@Override
public void say() {
System.out.println("接口多继承,方法say()");
}
@Override
public void spell() {
System.out.println("接口多继承,方法spell()");
}
@Override
public String say(String msg) {
System.out.println("接口多继承,方法say()+name");
return "name";
}
}
客户端:
/**
* @Description:
* @author:Dxh
* @date:2018年1月4日
*/
public class Client {
public static void main(String[] args) {
GradeService serviceImpl = new GradeServiceImpl();
serviceImpl.say();
serviceImpl.spell();
serviceImpl.say("name");
}
}
输出:
接口多继承,方法say()
接口多继承,方法spell()
接口多继承,方法say()+name