( 5点)
1.接口的方法默认是public,所有方法都是抽象方法,在接口中不能有实现(Jdk 1.8开始接口方法可以有默认实现,使用default关键字),抽象类可以有非抽象的方法
public interface A {
//接口中的方法可以不是抽象的
//jdk 1.8 之前接口中方法都是抽象的 ,jdk 1.8之后接口中的方法可以有默认方法
default void test1(){
System.out.println("ddd");
}
}
⒉接口中的实例变量默认是final类型的,而抽象类中则不一定
3.—个类可以实现多个接口,但最多只能继承一个抽象类
//Animal 抽象类。Run,Eat 是接口
public class Cow extends Animal implements Run,Eat{
//类可以即继承类,又实现接口
@Override
public int sleep() {
// animal 抽象类中的抽象方法
return 0;
}
@Override
public void run() {
// Run 接口中的方法
}
@Override
public void eat() {
// Eat 接口中的方法
}
}
4.一个类实现接口的话要实现接口的所有方法,而抽象类不一定
public class Person implements Run {
//implements 类 关联 接口
//一个类如果实现某个接口的话,必须实现接口里的所有方法
@Override
public void run() {
// TODO 自动生成的方法存根
}
@Override
public int eat() {
// TODO 自动生成的方法存根
return 0;
}
}
public abstract class Animal implements Run{
//但如果不想把接口中方法都具体实现,把类变为抽象类
public abstract void jump();//抽象类本身还可以再加写抽象方法
}
5.接口不能用new实例化,但可以声明,但是必须引用一个实现该接口的对象。从设计层面来说,抽象类是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。
public class Test {
public static void main(String[] args) {
//Run是接口 Cow是一个关联它的类
//Run 类型接口只能调用自己的run,sleep方法
Run cowRun=new Cow();
cowRun.run();
cowRun.sleep();
}
}