抽象类的子类使用 extends 来继承,接口则是使用 implements 来实现接口。例如:
(1)抽象类
public abstract class MyAbstract {} // 继承抽象类 public class Demo extends MyAbstract {}
(2)接口
public interface MyInterface {} // 实现接口 public class Demo implements MyInterface { }
抽象类可以有构造函数,接口不能有。例如:
public abstract class MyAbstract { public MyAbstract(String msg) { //... } } public interface MyInterface { // 错误 public MyInterface() { // } }
在 IDEA 中,提示的错误信息如下图:
抽象类可以有 main() 方法,并且我们能运行它,因为抽象类不能被实例化;接口不能有 main() 方法。如下:
public abstract class MyAbstract { public static void main(String[] args) { System.out.println("Hello World"); } } public interface MyInterface { // 错误 public static void main(String[] args) { System.out.println("Hello World"); } }
类可以实现很多个接口;但是只能继承一个抽象类。例如:
import java.io.Serializable; public class Demo implements MyInterface, Serializable,Comparable<String> { @Override public int compareTo(String o) { return 0; } }
上面类实现了 3 个接口。
import java.util.ArrayList; public class Demo extends MyAbstract, ArrayList<String> { }
在 IDEA 中,提示的错误信息如下图:
接口中的方法默认使用 public 修饰;抽象类中的方法可以是任意访问修饰符。
public interface MyInterface { void show(); }
等价
public interface MyInterface { public void show(); }
下面抽象类中的方法定义均合法:
public abstract class MyAbstract { public void show1() {} protected void show2() {} private void show3() {} void show4() {} }