接口、策略设计模式、抽象类和接口的区别

本文详细探讨了Java中的接口、策略设计模式以及抽象类的区别。接口被视作一种特殊的抽象类,不能包含实现,常用于定义规范和多继承。策略模式通过参数传递不同的行为来实现算法的动态选择。抽象类则可以包含部分实现,提供了一个过渡地带。在Java中,一个类可以实现多个接口,但只能继承一个抽象类。接口和抽象类在设计上各有优势,需要根据具体场景权衡使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《接口》
一、接口的语法
1.接口可以看作是一种特殊的“抽象类”,抽象类中能够有部分实现,而接口不能有任何实现
2.接口的语法:
[修饰符] interface 接口名 [extends 父接口名列表]{
[public] [static] [final] 常量;
[public] [abstract] 方法;
}
3.接口和类的命名规则一样,首字母大写
4.接口和类的访问修饰符只有两种:
(1)默认不加,只能在同包中被访问
(2)Public,全局通用
5.接口的组成:
(1)静态常量 static final(默认可以省略不写,必须初始化其值)
(2)抽象方法 abstract(默认可以省略不写)
6.接口中的成员都是public的,默认不写也是public,不能缩小其范围值
7.接口是抽象的,不能实例化,以下两种写法是一样的
(1)insterface A{ }
(2)abstact interface A{ }
8.在JDK5以前,没有枚举enum,通常在接口中定义常量组来实现枚举效果
9.接口可以继承接口,但不能继承类,并且弥补类的单一继承,接口可以多继承
10.接口不能有构造方法

二、实现接口
1.接口本身是抽象的,不能实例化
2.所以依赖于实现类去实现接口
(1)一个类可以实现多个接口,逗号分隔
(2)实现接口的关键字是:implements
(3)一个类实现了接口,需要实现(重写)接口中的所有方法,包括接口的所有父级接口
(4)如果是抽象类实现接口,可以无需实现接口中的方法或者重写某一个方法
3.接口变量可以引用实现类对象,符合里氏替换原则,所以也可以实现多态效果
4.继承表示的是is a的关系,接口通常表示的是一种能力,可以理解为can do
5.继承会影响对象的本质,而接口的侵入比较小,只要求对象具备某些功能
6.案例:
(1)CellPhone是手机的基类
(2)有Nokia和Huawei作为子类
(3)手机可以拍照,但不是照相机,所以实现Photograph接口
(4)照相机Camera也实现了拍照接口
(5)如果旅游的过程中需要拍照,可以拿出相机,也可以拿手机拍照
7、接口陷阱:
有两个接口,接口中方法名相同,参数相同,返回值类型不同,在实现类中不可以同时实现两个接口。
有两个接口,接口中方法名相同,参数不同,返回值类型相同,在实现类中可以同时实现两个接口(相等于重载)。

三、策略设计模式(strategy)
1.创建一个能够根据所传递的参数对象的不同而具有不同行为的方法,被称为策略设计模式
2.这里方法包含要执行算法的固定不变的部分,而“策略”包含变化的部分
3.案例:
(1)对数组进行排序
(2)算法有三种:二分法排序 division、插入排序 insert、冒泡排序bubble
(3)可以根据需要使用不同的排序方法进行排序
四、深入理解接口
1.接口是一种约定,一个标准,一个规范
2.接口的目的:将设计(接口)与实现分离,因此接口被用来建立类与类之间的协议
3.接口好比指指点点的领导,把哪些事情要做,大致怎么做罗列了一番,而员工就是实现类,真正按照老板的意思去完成了
4.一个类可以实现多个接口,并且可以向上转型为每个接口,因为每一个接口都是一个独立的类型
5.如果一个类实现了接口也继承了父类,则父类要写在前面
6.接口是双方的约定,所以接口内的所有内容都是共有的,保证双方都清楚知道所有内容
7.同时实现多个接口时候的命名冲突需要注意,方法名和参数相同,但返回类型不同时会报错

码农平台:
五、抽象类和接口的区别
1.以打印机的例子来说明接口和抽象类
2.接口和抽象类都是抽象的,都不能实例化,都可以用来做设计,都可以包含抽象方法
3.接口只提供了形式,而未提供任何具体实现,抽象类可以有具体实现
4.抽象类是普通类与接口之间的一种中庸之道,是一个过渡地带
5.接口的侵入性小,因为接口可以多实现,而继承是单根性,在都可以使用的前提下通常优先考虑接口
6.尽管在构建具有某些未实现方法的类时,你的第一想法可能时创建接口,但抽象类仍然是用于此目的的一种重要而必须的工具,因为你不可能总是使用纯接口
7.继承抽象类会控制你的本质,而实现接口本质不变,只是要求你具备什么样的能力
8.接口和抽象类都具有强制约束力,如果不重写方法都无法编译通过
9.接口可以多继承,可以通过灵活的组合衍生出新的接口
(1)有单独的接口Photoable,Network,PlayMusic,Callable,SendMsg,Touchable
(2)可以在以上接口的基础上,衍生出Camera,HandSet,Pad等子接口
10.不要盲目崇拜接口,具体情况还要具体分析,权衡利弊后选择抽象类还是接口
课工场:
接口和抽象类的区别:
1.abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。 继承抽象类使用的是extends关键字,实现接口使用的是implements关键字,继承写在前面,实现接口写在后面。如果实现多个接口,中间用逗号分隔,接口中类命名以大写的I开头,实现接口implems以Ipml结尾。
2.在abstract class中可以有自己的数据成员,也可以有非abstract的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。
3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"(是一个,代表继承关系)关系,interface表示的是"like-a"(像一个,代表组合关系)关系。(假设A like a B,那么B就是A的接口。 )
4.实现接口的类必须实现其中的所有方法,继承自抽象类的子类实现所有的抽象方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。
5.接口中定义的变量默认是public static final 型,且必须给其初值,同时要大写,所以实现类中不能重新定义,也不能改变其值。
6.抽象类中的变量默认具有 friendly权限,其值可以在子类中重新定义,也可以重新赋值。
7.接口中的方法默认都是 public abstract 类型的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值