抽象类和接口

举报
孙小北 发表于 2022/02/24 22:31:10 2022/02/24
【摘要】 一、抽象类和接口的定义从设计层面来说,抽象是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。即接口只能定义一系列方法,而不能包含方法的实现和变量,不能拥有自己的属性,但是抽象类能够拥有变量。接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情。...

一、抽象类和接口的定义

从设计层面来说,抽象是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。即接口只能定义一系列方法,而不能包含方法的实现和变量,不能拥有自己的属性,但是抽象类能够拥有变量。

接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情。接口是一组规则的集合,它规定了实现本接口的类或接口必须拥有的一组规则。体现了自然界“如果你是……则必须能……”的理念。

//策略接口
public interface IStrategy 
{    
   public void strategyInterface();
}

抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。

//抽象策略类 
public abstract class Strategy { 
    public abstract void doSum(); //算法方法  
}


二、接口和抽象类异同点

接口和抽象类相同点:

1 接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于其他类实现和继承

2 接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。

接口和抽象类不同点:


接口只能包含抽象方法,静态方法和默认方法,不能为普通方法提供方法实现,抽象类可以有非抽象的方法

2 接口只能定义静态常量,不能定义普通成员变量抽象类里则既可以定义普通成员变量,也可以定义静态常量

接口不能包含构造器抽象类可以包含构造器,抽象类的构造器并不是用于创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始化操作

4 接口不能包含初始化块,但抽象类里完全可以包含初始化块

5 一个类最多只能有一个直接父类(C++中可以多个),包括抽象类,但一个类可以直接实现多个接口,通过实现多个接口可以弥补Java、C#单继承不足。

一个类实现接口的话要实现接口的所有方法,而抽象类不一定

三、什么时候使用抽象类和接口

如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。

如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。

如果基本功能在不断改变,使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。