首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java——抽象与接口前世今生

抽象体现就是一种模板模式设计,抽象作为多个子类通用模板,子类抽象基础上进行扩展、改造,但子类总体上会大致保留抽象行为方式。...如果编写一个抽象提供了多个子类通用方法,并把一个或多个方法留给其子类实现,这就是一种模板模式,模板模式也是十分常见且简单设计模式之一。...一个最多只能有一个直接,包括抽象;但一个可以直接实现多个接口,通过实现多个接口可以弥补Java单继承不足。 接口抽象10大面试题: 1. Java抽象可以有构造函数?...做法,提供一个抽象以及一个接口来声明类型 。这样例子,java.util.List接口相应java.util.AbstractList抽象。...是否抽象中有抽象方法引起争论。我观点抽象应该有抽象方法,因为这是当程序员看到那个并做假设第一件事。这也符合最小惊奇原则。 7. Java抽象接口有何不同?

79320
您找到你想要的搜索结果了吗?
是的
没有找到

为什么使用抽象?有什么好处?

小王:“你要让我帮你拿那个水杯?” 你要水杯对象。而东西水杯。通常东西没有实例对象,但我们有时需要东西引用指向它子类实例。...你看你房间乱成什么样子了,以后不要把东西乱放了,知道么? 又是东西,它是一个数组。而数组中元素都是其子类实例。 --------- 上面讲只是子类。而没有说明抽象作用。...它还没有死亡之前,我可以尽量移动翻转它。这样可以使它起到落地时起到一定作用,如果的话,还可以减下少几行呢。这看起来象人生一样,它在为后来人努力着。 当然,我们不是真的要写一个游戏。...但是,当我调用当前方块翻转方法时,它子类都有?如果你把翻转方法写到方块中,它子类自然也就有了。可以这六种子类翻转方法不同。我们知道'田'方块,它只有一种状态,无论你怎么翻转它。...而长条方块有两种状态。一种‘-’,另一种‘|’。这可怎么办呢?我们知道Java多态性,你可以让子类来重写方法。也就是说,中定义这个方法,子类重写这个方法。

1.6K90

Java中抽象接口中可以有构造方法?

Java中抽象接口中可以有构造方法?...----------------------------------------------------------------------------- (1)Java中抽象接口中有构造方法?...抽象中可以有构造方法,只是不能直接创建抽象实例对象, 但实例化子类时候,就会初始化,不管是不是抽象都会调用构造方法,初始化一个,先初始化。...构造方法不能被子类调用,可以通过super语句调用构造方法。 E. 构造方法可以重载,以参数个数、类型、顺序,分为空参构造方法有参构造方法。...如果一个里包含了一个或多个抽象方法,就必须指定成abstract(抽象)。 “抽象方法”,属于一种不完整方法,只含有一个声明,没有方法主体。

1.9K10

面向对象三大特性

继承 继承一种创建新方式,python中,新建可以继承一个或多个又可称为基或超,新建称为派生子类 多态 引用指向子类对象,接口引用指向实现对象,通俗说就是可以将子类对象赋值给对象...继承:继承一种创建新方式,python中,新建可以继承一个或多个又可称为基或超,新建称为派生子类 继承表示一种什么是什么关系 继承有哪些优点 (为什么要用继承或者说是使用继承好处...继承了Father pass 单继承 多继承(通过示例来说明):只python中有多继承其他语言只要单继承 class Father: #1 pass class...抽象一个介于接口直接一个概念,同时具备接口部分特性,可以用来实现归一化设计 python中,并没有接口这种东西,即便不通过专门模块定义接口,我们也应该有一些基本概念。...继承:子类继承了方法属性 派生:子类方法属性基础上产生了新方法属性 抽象与接口 1.多继承问题 继承抽象过程中,我们应该尽量避免多继承; 而在继承接口时候,我们反而鼓励你来多继承接口

58410

Java 接口理论篇

Public static int num=5; 以下为第一节课程复习 02.接口定义 01.接口一种规范,约束实现该接口中方法签名(方法名,参数列表返回值) 02.public interface...Door,Lock{   Public void test(){   } } 03.Java中三种多态实现方案 方案一:一个普通Parent,一个普通方法test() 子类Child继承...,子类中有一个同名方法test() Parent p=new Child(); P.test();//子类方法 方案二:Parent抽象,有一个抽象方法test() 子类Child继承抽象,...真的希望,有一天,抽象可以拿着麦克风大声说,其实我一个有用。我不只是别人嫁衣,别人陪衬。 难道面向接口编程今天,我抽象真的就没有天日可见了吗,就因为我不能多继承?我不服。...抽象有自己构造函数,但是却不能new,这种无奈谁又能懂?难道抽象存在只是为了子类? 然而恰恰抽象就处于这样一个尴尬境地。

78960

Python入门之面向对象之类继承与派生

继承定义     继承一种新建方式,新建被称为子类子类会继承属性。     Python中支持,一个子类(派生——可以继承一个或者多个(基或者超) 2. ...中有默认object (,)   #Python3中有默认object # python3新建,默认都有一个(object) # python2...中,默认没有,可以添加(object)为 需要注意Python2Python3中关于分类不一样: #Python2中: # # 1.经典 # 指的是没有继承默认...object,以及没有继承object子类 # # 2.新式 # 值得继承默认object以及object子类 # # #Python3中: # #...子类派生出新方法中重用功能 派生,子类定义自己新属性,如果与类同名,以子类自己为准     a.

90080

继承多态

刚才我们提到了,可以已有基础上创建新,这其中一种做法就是让一个从另一个那里将属性方法直接继承下来,从而减少重复代码编写。...子类除了继承提供属性方法,还可以定义自己特有的属性方法,所以子类拥有的更多能力,实际开发中,我们经常会用子类对象去替换掉一个对象,这是面向对象编程中一个常见行为,对应原则称之为里氏替换原则...通过方法重写我们可以让一个行为子类中拥有不同实现版本,当我们调用这个经过子类重写方法时,不同子类对象会表现出不同行为,这个就是多态(poly-morphism)。...Python从语法层面并没有像Java或C#那样提供对抽象支持,但是我们可以通过abc模块ABCMeta元abstractmethod包装器来达到抽象效果,如果一个中存在抽象方法那么这个就不能够实例化...上面的代码中,DogCat两个子类分别对Petmake_voice抽象方法进行了重写并给出了不同实现版本,当我们main函数中调用该方法时,这个方法就表现出了多态行为(同样方法做了不同事情

40650

Python:多态、协议和鸭子类

策略模式一文实现中,使用了抽象(Abstract Base Class,ABC)来实现接口,这主要是为了写法上看起来 java、C# 等语言更加像,易于有这些语言基础同学理解对比。...抽象 Python 语言诞生 15 年后,Python 2.6 才引入。这里我们不详细介绍抽象,因为即便现在也很少有代码使用抽象。...这不就是多态? 用“鸭子类型”来实现策略模式也很简单,删掉抽象就可以了。(这就是为什么抽象很少使用原因,因为删掉代码也一样正确啊。)有兴趣小伙伴可以自己尝试一下代码。...Python协议举例 Python 中有很多协议,比如迭代器协议,任何实现了 __iter__ __next__ 方法对象都可称之为迭代器,但对象本身是什么类型不受限制,这得益于鸭子类型。...,一个对象特征不是由决定,而是通过对象方法决定

97920

Python里面这些点,据说80%新手都会一脸懵逼

只要是写代码最后一定会走到,而封装扩展必须要掌握,如何能有更好封装性呢,classmethodstaticmethod就派上用场了! 1).假如有一个场景,计算日期 ?...传统做法: ? image.png 这样做法会导致每次初始化时候,都要先分割成3个参数再导入,非常麻烦! @staticmethod(静态方法就派上场) ?...Python当然也有这样设计,其实如果学过Java会非常理解!比如子类要调用方法,或者覆盖方法都会用到super(). 1).调用方法 ?...image.png C++里面有抽象概念,Python里面的设计时候,也考虑到了这一点,但是由于Python本身特性一切皆对象,大部分时候都依赖鸭子类型。...with abstract methods fly Bird继承ABC,也就是说Bird一个抽象,不能被初始化,比如你初始化一下,会报错

38430

给大家简简单单介绍一下设计模式

并且如果方法发生改变时候,可能会对所有的子类造成影响。 里氏替换原则 里氏替换原则是1988年麻省理工学院一个姓李女士提出。 所有引用基地方必须先是透明使用其子类对象。...继承中,遵循里氏替换原则,子类中尽量不在重写方法。 里氏替换原则告诉我们,继承实际上让两个耦合性增强了,适当情况下,可以通过聚合、组合、依赖来解决问题。...解决问题办法 原来子类都继承一个更通俗,原有的继承关系去掉,采用依赖、聚合、组合等关系替代。 2.5 开闭原则(ocp原则) 开闭原则是编程中最基础、最重要设计原则。...优点: 提高代码复用性:将相同部分代码放在抽象中,而将不同代码放入不同子类中; 实现了反向控制:通过一个调用其子类操作,通过对子类具体实现扩展不同行为, 实现了反向控制并且符合开闭原则...观察者模式中有如下角色: Subject:抽象主题(抽象被观察者),抽象主题角色把所有观察者对象保存在一个集合里,每 个主题都可以有任意数量观察者,抽象主题提供一个接口,可以增加删除观察者对象;

29840

设计模式--模板方法模式思考

模板方法同样也是一种很实用方法,目的提高代码复用,并且统一大体算法流程,比如一个一台电脑主机,定义放置CPU,硬盘,内存等空位后,就形成了一个骨架,那么这个就是模板,具体CPU,内存,硬盘是什么牌子型号则不需要考虑...模板方法模式 模板方法模式可以说是抽象一种特性,可以定义抽象(abstract)方法与常规方法,抽象方法延迟到子类中实现.因此标准模板方法一般一个抽象+具体实现子类,抽象(AbstractClass...,因此还可以实现一些子类锁需要公共方法,比如事务提交与回滚,模板本质还是抽象,同时也是,当然可以有这些公共方法定义....()把变化查询步骤延迟到了子类中实现.另外有一种模板单纯提供代码复用,其可以当成不含有业务属性一个方法库,提供对所有子类都有用公共方法.这个我我公司订单系统中采用,如下图所示(这里只列出一部分...创建vip订单,BizResearchOrderService创建研究员订单.当子类有通性则可以在上层增加专属抽象来提前分叉,最终保证每一个订单创建走流程都是可控,当要修改某一个订单规则时,比如

55040

猿进化系列5——看了这个,你就会搞对象了

赶紧封装一个女朋友! ? ? ? ? ? ? 想知道怎么做到乔丹一样强大?Java提供了这种机制——继承。子类可以继承属性方法,子类可以直接访问非私有属性行为。...当然可以访问!修改代码: ? 子类中访问属性方法,需要使用关键字super,关键字super代表引用地址!...一个不能同时继承两个以上。 2. Java支持多层继承,比如A继承B,B继承C。 3. 子类一个相对概念,子类子类。 ?...Java中提供了一种方式类似于插头东西,可以将连接到一起。接(Interface),JAVA编程语言中一个抽象类型,抽象方法集合。接口通常以interface来声明。...多态指同一种行为具有不同表现形式。我们想一想java中有哪些特性符合:同一种行为但是表现形式不同

36320

设计模式 -- 里氏替换原则

表述(不要破坏继承体系) 子类可以替换位置.并且程序功能不受影响(当一个指针指向一个子类对象时候,这里就有里氏替换原则) 优点 代码共享,减少创建工作量,每个子类都拥有所有属性方法...提高代码可扩展性 注意事项 子类可以实现抽象方法,但是不能覆盖抽象方法 通俗讲,子类都覆盖了方法,那继承还有啥意义呢?...若子类覆盖了出现地方,用子类替换,最终调用却是子类中方法,这就违反了里氏替换原则 因为出现地方,调用肯定是中方法,若用子类替换,调用还是方法或者子类实现抽象方法...(满足功能约束),这才符合里氏替换原则 示例 需求:员工工资计算,刚开始,我们会新建一个员工中有一个计算工资方法 class Employee{ func calculateSalary...如果非要重写里面的方法,比较通用做法:原来子类都继承一个更通用,原有的继承关系去掉,采用依赖、聚合、组合等关系代替。

10310

『设计模式』瑞幸咖啡还是星巴克,一杯下午茶让我明白 设计模式--模板方法模式(Template Method Pattern)

模板方法本质:抽象封装流程,具体进行实现 模版方法模式需要开发抽象具体子类设计师之间协作。 一个设计师负责给出一个算法轮廓骨架 另一些设计师则负责给出这个算法各个逻辑步骤。...; 提取公共代码,便于维护 缺点 抽象规定了行为,具体负责实现,与通常事物行为相反,会带来理解上困难(通俗地说,“调用了子类方法”); 每一个不同实现都需要一个子类来实现,导致个数增加,使得系统更加庞大...多个子类有公有的方法,并且逻辑基本相同时; 重要,复杂算法,可以把核心算法设计为模板方法,周边相关细节功能则由各个子类实现; 重构时,模板方法模式 一个经常使用模式,把相同代码抽取到,然后通过钩子函数约束其行为...抽象中只能定义抽象函数? 不是!看使用场景第三条! 每一个抽象子类都要具体实现? 语法上是的,但逻辑上,可以Do nothing 依据第一问,我能否对非抽象方法重写?...最后,设计模式给出一种设计框架,而不是条条框框,你需要用他真正优秀地方! 开发实例 就一杯下午茶,我到底咖啡还是喝茶,喝咖啡,瑞幸还是星巴克?

34620

『设计模式』设计模式--模板方法模式

模板方法本质:抽象封装流程,具体进行实现 模版方法模式需要开发抽象具体子类设计师之间协作。 一个设计师负责给出一个算法轮廓骨架 另一些设计师则负责给出这个算法各个逻辑步骤。...; 提取公共代码,便于维护 缺点 抽象规定了行为,具体负责实现,与通常事物行为相反,会带来理解上困难(通俗地说,“调用了子类方法”); 每一个不同实现都需要一个子类来实现,导致个数增加,使得系统更加庞大...多个子类有公有的方法,并且逻辑基本相同时; 重要,复杂算法,可以把核心算法设计为模板方法,周边相关细节功能则由各个子类实现; 重构时,模板方法模式 一个经常使用模式,把相同代码抽取到,然后通过钩子函数约束其行为...抽象中只能定义抽象函数? 不是!看使用场景第三条! 每一个抽象子类都要具体实现? 语法上是的,但逻辑上,可以Do nothing 依据第一问,我能否对非抽象方法重写?...最后,设计模式给出一种设计框架,而不是条条框框,你需要用他真正优秀地方! 开发实例 ?

1.1K20

2023 年 30 个 OOP 面试问题答案

以下抽象接口之间一些主要区别: 抽象 Interface 当一个抽象被继承时,子类并不需要在实际使用之前提供抽象方法定义。...当一个接口被实现时,子类需要指定所有接口方法以及它们实现。 一个抽象可以同时拥有抽象方法抽象方法。 一个接口只能拥有抽象方法。...什么析构函数? 析构函数一种在对象超出范围或被销毁时自动调用方法。 C++中,析构函数名称与名相同,但前缀为(~)波浪线符号。 Python中,析构函数名称为__del__。...事实上,默认构造函数、带参数构造函数拷贝构造函数都是构造函数重载形式。 28. 我们可以一个中重载析构函数? 不。一个中不能重载析构函数。一个中只能有一个析构函数存在。 29....什么虚函数? 虚函数用于派生中覆盖方法函数。它用于提供抽象C++中,使用virtual关键字声明虚函数。 Java中,每个公共、非静态非最终方法都是虚函数。

25730

3小时Java入门

我们强烈不推荐系统环境变量中设置classpath,那样会污染整个系统环境。启动JVM时设置classpath才是推荐做法。...可以用protected声明为受保护属性方法,只允许作用域及其子类作用域中访问。 不使用作用域关键字声明属性方法默认为为package作用域,一个package中可以访问。 ?...多态具有一个非常强大功能,就是允许添加更多类型子类实现功能扩展,却不需要修改基于代码。 这就实现了面向对象编程非常著名开闭原则:对扩展开放,对修改封闭。 ? ? ?...二十三,接口 抽象中,抽象方法本质上定义接口规范:即规定高层接口,从而保证所有子类都有相同接口实现,这样,多态就能发挥出威力。...C++编译最终结果一个程序生成一个exe文件。Java编译结果一个程序中有多少就生成多少个与名相同class文件。

2.7K30

今年面试太难了?2023 年 30 个 OOP 面试问题答案也许可以帮到你

以下抽象接口之间一些主要区别: 抽象 Interface 当一个抽象被继承时,子类并不需要在实际使用之前提供抽象方法定义。...当一个接口被实现时,子类需要指定所有接口方法以及它们实现。 一个抽象可以同时拥有抽象方法抽象方法。 一个接口只能拥有抽象方法。...什么析构函数? 析构函数一种在对象超出范围或被销毁时自动调用方法。 C++中,析构函数名称与名相同,但前缀为(~)波浪线符号。 Python中,析构函数名称为__del__。...事实上,默认构造函数、带参数构造函数拷贝构造函数都是构造函数重载形式。 28. 我们可以一个中重载析构函数? 不。一个中不能重载析构函数。一个中只能有一个析构函数存在。 29....什么虚函数? 虚函数用于派生中覆盖方法函数。它用于提供抽象C++中,使用virtual关键字声明虚函数。 Java中,每个公共、非静态非最终方法都是虚函数。

32241

如何设计优秀API(三)

这个问题仅仅在以下情况中才会显得尖锐突出:当类型很巨大,或者为了提高开发者工作效率,子类中重用实现时候。...我们可以称这样它们为“支撑(support class)”,支撑中有一个子类,它重用了某个实现。 使用接口第二个好处:可以将API与它实现有效地分离。...直接子类化FileSystem的人也很少。由此看来,似乎应该把FileObjctFileSystme作为抽象,但是事实上作为接口。...CloneableEditorSupport 支撑可以作为接口?很难。如果实现了支撑所有的方法,那它将会变成怎么样啊!所以,抽象类经常作为支撑。...可以给客户请求做日志?可以, EditorFactory实现这种功能好地方。 可以提供一些同步访问死锁等等保护EditorFactory里实现这些功能最佳选择。

59830
领券