最近面试被问到了一个很有趣的问题,java为什么不能多继承,当时懵了,这个问题重来就没有考虑过,一直按照生物学一些类属性划分,来理解记忆;
回来后网上查找,为什么java不能多继承,其实也很简单,问题在于功能在于谁实现,使用时能否准确定位是谁做。父类方法有方法体,也就是说能实现功能,子类继承父类,没有重写方法,调用的是父类的功能;假如可以继承多个父类,那么当父类A,B中有同样的方法或参数时,子类C调用父类方法或属性时很难判断要调用谁;例如
//父类1
public class Supper01{
String name="zhangsan";
public String getName{
return name;
}
}
//父类2
public class Supper02{
String name="lishi";
public String getName{
return name;
}
}
public class son extends Supper01,Supper02{
public void get(){
System.out.println(name);//打印 zhangsan 还是lisi
String st=etName();//获取 zhangsan 还是lisi
}
}
因此要限制单继承;但是接口不同,接口没有方法体,也就是没有功能,功能是实现类来做的,因此不用考虑让谁做的问题;定义的属性也是常量,要通过接口名来调用;
public interface Test02 {
public final static String name="zhangsan";
public void getDatea();
public void getDatea(String name);
}
public interface Test01 {
public final static name="lisi";//可以定义但是不能访问
public void getDatea();
}
public class Test03 implements Test01 , test02 {
@Override
public void getDatea() {//getDatea方法只需要重写一个即可,
Test01.name;//得到李四 lisi
Test02.name;//可以访问 得到 zhangsan
}
@Override
public void getDatea(String name) {
}
}