抽象类和接口的相同点:
1.都不能被实例化
2.接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法后才能被实例化
不同点:
1.接口只有定义,其方法不能再接口中实现,只有实现接口的类才能实现接口中定义的方 法,而抽象类的方法可以再抽象类中被实现。
2.接口需要用implements实现,抽象类只能被继承(extends)。
3.设计理念不同,接口是"has - a ",抽象类是"is -a "
4.接口中定义的成员变量默认修饰符为public static final(静态不能被修改),而且必须 给其赋初值。抽象类可以有自己的数据成员变量,也可以有非抽象的成员变量,而且抽象类中的成员变量默认为default(本包可见)。抽象类中的方法前面有abstract修饰,不能用private、static、synchronize、native修饰,同时方法必须以分号结尾,不带花括号。
为了方便理解,加入一段代码方便理解接口
interface Person{
public static final int num=100;
public void hairColor();//不能使用{}方法体括号,否则会报错
public void bodyLength();
}
public class InterfaceFaceDemo01 implements Person{
/*
* @see Person#hairColor()
* 使用接口后,必须将接口中的方法全部覆盖一遍,不然会报错
*/
public void hairColor(){
System.out.println("头发颜色:红色");
}
@Override
public void bodyLength() {
System.out.println("身高:180");
}
public static void main(String[] args) {
//要使用接口中的方法,需要实例化对象才能调用
/*
* 对比之前的笔记,如果不使用接口,又要使用方法,是需要在方法前面添加修饰符static的
*/
InterfaceFaceDemo01 iDemo01=new InterfaceFaceDemo01();
iDemo01.bodyLength();
iDemo01.hairColor();
}
}