interface接口与abstract抽象类的区别

1.abstract抽象类中既可以包含抽象方法,也可以包含非抽象的方法;
Interface接口中的方法都是抽象方法;
2.实现抽象类的方法时,如果方法是抽象的,由于抽象方法没有方法体,子类必须重写抽象的方法,除非子类也是抽象类;
如果方法不是抽象的,子类可以选择继承。
实现了接口,就必须实现接口中的所有方法,因为接口中的方法默认的全部都是抽象方法。
3.抽象类可以有私有的成员变量和成员方法
接口中的方法全部被默认的修饰为:public abstract 类型的方法
4.一个类只能继承一个抽象类。
一个类可以实现多个接口,接口只能实现多继承
5.抽象类中的非抽象方法可以选择继承
接口中的方法必须全部被重写,并且全部是公有的public方法
6.抽象类不能创建对象,抽象方法一定不能定义在最终类中。

Java中抽象类和接口中均不能定义静态的抽象方法
1.Java抽象类中不能有静态的抽象方法
抽象类是不能被实例化,即不能被分配内存;而static修饰的方法在类实例化之前就已经分配了内存,这样一来矛盾就出现了:抽象类不能被分配内存,而static方法必须被分配内存。所以抽象类中不能有静态的抽象方法。
2.接口中不能有静态的抽象方法
接口中的方法也只能是 public abstract修饰的,不能加上static。接口是不能实例化的,即不能被分配内存,而static修饰的方法在类实例化之前就已经别分配了内存,这样一来矛盾就出现了:接口不能被分配内存,而static方法必须被分配内存。所以接口中不能有静态的抽象方法。
3.抽象类不一定有抽象方法
4.静态和抽象不能共存在方法上
 因为静态属于字节码,不需要对象就可以运行;而抽象方法没有方法体,运行没有意义,所以不能共存。

猜你喜欢

转载自blog.csdn.net/cs_dnzk/article/details/87868906