抽象类和接口之间的区别 Java
抽象类和接口之间的主要区别 Java
- 在接口中,一个类可以实现多个接口,但该类只能继承一个抽象类。
- 接口中没有访问修饰符。接口中定义的所有内容都假定具有 public 修饰符,而抽象类可以具有访问修饰符。
- 接口不能包含数据字段,而抽象类可以有数据字段。
- 接口有助于定义类的外围能力,而抽象类定义类的身份。
什么是抽象类?
声明中包含 abstract 关键字的类称为抽象类。抽象类应该有零个或多个抽象方法。即没有主体的方法。它可以有多个具体方法。抽象类允许您为具体类创建蓝图。但继承类应该实现抽象方法。抽象类不能实例化。
使用接口的重要原因
- 接口用于实现 抽象化.
- 设计用于支持运行时的动态方法解析
- 它可以帮助您实现松散耦合。
- 允许你将方法的定义与继承层次结构分开
使用抽象类的重要原因
- 抽象类为子类提供默认功能。
- 为将来的特定课程提供模板
- 帮助你为其子类定义一个通用接口
- 抽象类允许代码重用。
什么是接口?
接口是可用于实现类的蓝图。接口不包含任何具体方法(具有代码的方法)。接口的所有方法都是抽象方法。接口无法实例化。但是,实现接口的类可以实例化。接口从不包含实例变量,但它们可以包含公共静态最终变量(即常量类变量)
接口和抽象类的区别 Java
抽象类允许您创建子类可以实现或重写的功能,而接口仅允许您声明功能但不允许实现它。一个类只能扩展一个抽象类,而一个类可以实现多个接口。
参数 | 接口 | 抽象类 |
---|---|---|
速度 | 放慢 | 快速 |
多重继承 | 实现多个接口 | 只有一个抽象类 |
结构 | 抽象方法 | 抽象方法与具体方法 |
何时使用 | 未来的增强 | 避免独立 |
继承/实施 | 一个类可以实现多个接口 | 该类只能继承一个抽象类 |
默认实现 | 在向接口添加新内容时,找到所有实现者并实现新定义的内容是一场噩梦。 | 如果是抽象类,您可以利用默认实现。 |
访问修饰符 | 接口没有访问修饰符。接口内部定义的所有内容都被视为 public 修饰符。 | 抽象类可以有访问修饰符。 |
何时使用 | 当各种实现仅共享方法签名时,最好使用接口。值类型的多态层次结构。 | 当同一类型的各种实现具有共同的行为时应该使用它。 |
资料栏位 | 接口不能包含数据字段。 | 该类可以有数据字段。 |
多重继承默认 | 一个类可以实现多个接口。 | 一个类只继承一个抽象类。 |
实施 | 接口是抽象的,因此它不能提供任何代码。 | 抽象类可以提供应该被覆盖的完整的默认代码。 |
使用访问修饰符 | 您不能对方法、属性等使用访问修饰符。 | 您可以使用包含访问修饰符的抽象类。 |
用法 | 接口有助于定义类的外围能力。 | 抽象类定义类的身份。 |
定义字段 | 无法定义字段 | 抽象类允许您定义字段和常量 |
遗产 | 一个接口可以继承多个接口,但是不能继承类。 | 抽象类可以继承一个类和多个接口。 |
构造函数或析构函数 | 接口不能声明构造函数或析构函数。 | 抽象类可以声明构造函数和析构函数。 |
扩展限制 | 它可以扩展任意数量的接口。 | 它一次只能扩展一个类或一个抽象类。 |
Abstract 关键字 | 在抽象接口关键字中,将方法声明为抽象是可选的。 | 在抽象类中,必须使用 abstract 关键字来将方法声明为抽象。 |
班级类型 | 接口只能有公共抽象方法。 | 抽象类具有受保护的和公共的抽象方法。 |
接口和抽象类的示例代码 Java
以下是创建接口和抽象类的示例代码 Java
接口语法
interface name{ //methods }
Java 界面示例:
interface Pet { public void test(); } class Dog implements Pet { public void test() { System.out.println("Interface Method Implemented"); } public static void main(String args[]) { Pet p = new Dog(); p.test(); } }
抽象类语法
abstract class name{ // code }
抽象类示例:
abstract class Shape { int b = 20; abstract public void calculateArea(); } public class Rectangle extends Shape { public static void main(String args[]) { Rectangle obj = new Rectangle(); obj.b = 200; obj.calculateArea(); } public void calculateArea() { System.out.println("Area is " + (b * b)); } }