一文搞懂Java中的抽象类和接口到底是什么
概述
在Java中,抽象类和接口都是用来抽象出类的共性,以便于复用或实现。本文将对抽象类和接口的定义和用法进行详细的讲解与比较。
抽象类
抽象类是用来表示一类对象的基本特征,但是它不能被实例化,只能被继承。抽象类中可以包含抽象方法和非抽象方法。抽象方法没有具体的实现,其子类必须实现抽象方法。抽象类的关键字为abstract
。
定义抽象类
public abstract class Animal {
public abstract void sound(); // 抽象方法
public void sleep() { // 非抽象方法
System.out.println("睡觉");
}
}
继承抽象类
public class Dog extends Animal {
public void sound() { // 实现抽象方法
System.out.println("汪汪汪");
}
}
接口
接口用于表示一组相关方法的集合,但是它不能被实例化,只能被实现。接口中的方法都是抽象方法,其实现都由实现接口的类负责。接口的关键字为interface
。
定义接口
public interface Shape {
public double area(); // 抽象方法
public double circumference(); // 抽象方法
}
实现接口
public class Circle implements Shape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
public double area() { // 实现area()方法
return Math.PI * radius * radius;
}
public double circumference() { // 实现circumference()方法
return 2 * Math.PI * radius;
}
}
比较
抽象类和接口有以下区别:
- 抽象类可以包含非抽象方法,而接口的方法都必须是抽象方法。
- 子类只能继承一个抽象类,而可以实现多个接口。
- 抽象方法定义了一种约束,而接口定义了一种契约。
示例说明
示例一:抽象类
在示例中,抽象类Animal
是用来表示动物的基本特征,包含一个抽象方法sound()
和一个非抽象方法sleep()
。狗Dog
继承了Animal
,并且实现了sound()
方法。假设有一只猫也继承自Animal
,那么它需要实现sound()
方法才能被正确使用。
示例二:接口
在示例中,接口Shape
定义了一组几何形状的方法,包含两个抽象方法area()
和circumference()
。圆形Circle
实现了Shape
接口,它需要实现area()
和circumference()
方法才能被正确使用。如果要实现矩形、正方形等形状,也可以实现Shape
接口实现所需要的方法即可。
总结
抽象类和接口是Java中面向对象的重要特性,有了它们,可以更好地组织代码和抽象出类的共性,提高代码的复用性和可扩展性。在使用时,根据具体的业务需求选择抽象类和接口的使用方式。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一文搞懂Java中的抽象类和接口到底是什么 - Python技术站