1. 抽象类和接口都不能够实例化
import java.util.*;
public class MyTest {
public static void main(String[] args) {
MyTest myTest = new List(); //Cannot instantiate the type List
myTest.f();
}
private void f() {
// TODO Auto-generated method stub
System.out.println("调用了f");
}
}
public abstract class MyTest {
public static void main(String[] args) {
MyTest myTest = new MyTest(); //Cannot instantiate the type MyTest
myTest.f();
}
private void f() {
// TODO Auto-generated method stub
System.out.println("调用了f");
}
}
2.一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类。
public abstract class Demo {
int a;
public Demo(int a) {
this.a = a;
}
public abstract void ff();
}
public class MyTest extends Demo{ //The type MyTest must implement the inherited abstract method Demo.ff()
public MyTest(int a) {
super(a);
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
MyTest myTest = new MyTest(1);
myTest.f();
}
private void f() {
// TODO Auto-generated method stub
System.out.println("调用了f");
}
}
3.接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法,而接口中不能定义构造器而且其中的方法全部都是抽象方法。
4.抽象类中的成员可以是private、默认、protected、public的,而接口中的成员全都是public的。
5.抽象类中可以定义成员变量,而接口中定义的成员变量实际上都是常量。
6.有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法。