1、接口比抽象类更加高级
抽象类说一千到一万也是一个类,只能单继承,public abstract class ChouXiang
接口,可以多继承,public interface PassInterface ,接口比抽象类还有抽象
2,定义的方法的区别
接口中的方法必须都是public 绝度没有方法体
抽象类中的方法 可以是private但是需要方法体,private是子类看不到的,
The abstract method XXX in type ChouXiang can only set a visibility modifier, one of public or protected
抽象的方法 只能为public 和protect
相同点:接口中的方法和抽象方法都不能为static
3成员变量
接口中的成员变量都为public static final ,为什么会是 static final,一会再解释,
抽象类中的方法可以为 private public protect
4 构造方法
接口中不存在构造方法
抽象类中有构造方法 如果构造方法为私有,那么就不可以继承它
5接口和抽象类到底如何通俗的比喻??
接口可以比喻成星球,它是纯天然,它的变量是纯天然的属性,不可修改,一旦实现它 就必须实现它所有的方法,
抽象类可以比喻成树木,它虽然为抽象的,但是也有一种形态,一旦一个类继承它,则会有它的形态,不是私有的属性可以任意修改
6继承只能单继承,实现可以实现多个接口(多继承有很多弊端,而接口则可以避免,比如方法重名,变量重名等等)
7接口中变量有什么用?
接口中的变量好比这个接口的属性,你实现这个接口就拥有这个属性,这个纯天然的属性是不允许改变的,
8接口实现类向上转型和继承抽象类向上转型是不同的
接口向上转型:准确的说是接口回调,主要是调用方法的实现,我们不用操心实现类还有什么东西,接口和实现类并没有多大的管理,接口的变量只是通知实现类调用某个方法
继承抽象类向上转型:抽象类的引用和继承类的关联是相当大的,调用方法就是直接调用重写的方法
接口更多的应用是起到统一规范、回调的作用
继承很多的是整个系统关联关系的作用。
public interface PassInterface {
String my="My"; //默认 public static final 唯一
String getA(); //默认public 唯一
}
public interface ToInterface {
String my="my";
public String getC();
}
public abstract class ChouXiang {
private String my; //public protect private 都可以
public abstract String getD(); //继承时必须重写的
static void getN(){ 方法也比较随意
};
public abstract String getA();
private String getM() {
return null;
}
}
public class Pass extends ChouXiang implements PassInterface,ToInterface{
public void getW(){
}
@Override
public String getA() {
System.out.println("pass");
return PassInterface.my;
}
public static void main(String[] args) {
ChouXiang chou=new Pass();
chou.getA();
PassInterface ps=new Pass();
ps.getA();
}
@Override
public String getC() {
return ToInterface.my;
}
@Override
public String getD() {
// TODO Auto-generated method stub
return null;
}
}
接口的方法和抽象类中的方法可以同名,调用时不同引用调用的是同一个实现方法