1.接口是公开的,里面不能有私有的方法或者变量,是用于让别人使用的,而抽象类是可以有私有的方法或者私有变量的。
2.实现接口的一定要实现接口里面定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般应用里最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。
3.接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多继承,接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用。
4.抽象类中可以有非抽象方法(实现了的方法包括构造函数),接口方法都是抽象方法。abstract
5.抽象类可以继承接口,而接口不能继承抽象类。
因为Java只允许单继承,所以抽象类作为类型定义受到了极大的限制,但是一个类可以实现多个接口。
6.含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写。
7.抽象类不能被实例化。
例子:
抽象方法只需声明,而不需实现某些功能。如:
public abstract void enjoy();
上面的这个抽象方法不需要实现功能,而一般的方法 :
public void enjoy() {
System.out.print("叫声"); //有必要实现某些功能
}
例子 :多态程序,没抽象类的
class Person {
public void f() {
System.out.println("父类");
}
}
class Students extends Person {
public void f() {
System.out.println("学生类");
}
}
class Teacher extends Person {
public void f() {
System.out.println("教师类");
}
}
public class Test3 {
public static void main(String[] args) {
Person s = new Students();
Person t = new Teacher();
s.f();
t.f();
}
}
抽象类的多态程序:
abstract class Person {
public abstract void f();
}
class Students extends Person {
public void f() {
System.out.println("学生类");
}
}
class Teacher extends Person {
public void f() {
System.out.println("教师类");
}
}
public class Test3 {
public static void main(String[] args) {
Person s = new Students();
Person t = new Teacher();
s.f();
t.f();
}
}
什么时候使用抽象类和接口
如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。
如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。
如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。
//报错原因:抽象类不能进行实例化操作
//Animal Tiger = new Animal();
//只能用子类进行实例化
网友评论