在Java中,抽象类和接口都是面向对象编程中的重要概念。
抽象类是一个不能被实例化的类,它仅仅是为子类提供一个通用的抽象模板。抽象类中的方法可以是抽象方法(没有实际实现)或者具体实现的方法。如果一个类继承了抽象类,它必须重写其所有抽象方法,否则也必须声明为抽象类。
abstract class Animal { public abstract void makeSound(); //抽象方法 public void sleep() { //普通方法 System.out.println("睡觉zzz"); } } class Cat extends Animal { public void makeSound(){ System.out.println("喵喵"); } }
接口是一个包含了一些方法申明的纯抽象类。接口中的所有方法都是public abstract方法,不能有方法实现。如果一个类实现了接口,它必须实现所有接口中的方法。
interface Animal { void makeSound(); void eat(); } class Cat implements Animal { public void makeSound() { System.out.println("喵喵"); } public void eat() { System.out.println("鱼"); } }
抽象类和接口的选择取决于具体的需要。如果需要创建一个类,并且想要为该类提供一些通用(但重要)的功能或行为,可以创建一个抽象类。如果需要定义一个外部类和实现这个类,可以使用接口。另外,Java的类只能单继承,但可以实现多个接口,这使得接口更加灵活。