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

为什么抽象方法必须由第一个具体类实现,而不是链中的另一个?

这个问题涉及到面向对象编程中的抽象类和方法的实现。在面向对象编程中,抽象类是一种特殊的类,它不能被实例化,只能被继承。抽象方法是一种没有实现的方法,它必须在子类中实现。

当一个类继承一个抽象类时,它必须实现抽象类中的所有抽象方法。这是因为抽象方法是没有实现的,如果子类没有实现它们,那么这些方法就无法使用。因此,当一个类继承一个抽象类时,它必须实现抽象类中的所有抽象方法,包括那些在继承链中的其他类中定义的抽象方法。

在这个问题中,抽象方法必须由第一个具体类实现,而不是链中的另一个,是因为具体类是最终实现抽象方法的类,它必须实现所有的抽象方法,包括那些在继承链中的其他类中定义的抽象方法。如果在链中的另一个类中实现了抽象方法,那么这个类就不是一个抽象类,它必须实现所有的抽象方法,包括那些在继承链中的其他类中定义的抽象方法。

总之,抽象方法必须由第一个具体类实现,而不是链中的另一个,是因为具体类是最终实现抽象方法的类,它必须实现所有的抽象方法,包括那些在继承链中的其他类中定义的抽象方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C# 继承、多态性、抽象和接口详解:从入门到精通

C# 继承在 C# ,可以将字段和方法从一个继承到另一个。我们将“继承概念”分为两:派生(子类) - 从另一个继承(父) - 被继承要从一个继承,使用 : 符号。...run(); // 接口方法(没有方法体)}通常,以字母 "I" 开头是一种良好实践,因为这样可以更容易地记住它是一个接口不是一个。...默认情况下,接口成员是抽象和公共。注意:接口可以包含属性和方法,但不能包含字段。要访问接口方法,接口必须由另一个实现”(有点像继承)。要实现接口,请使用冒号符号(与继承一样)。...run(); // 接口方法(没有方法体)}通常,以字母 "I" 开头是一种良好实践,因为这样可以更容易地记住它是一个接口不是一个。...默认情况下,接口成员是抽象和公共。注意:接口可以包含属性和方法,但不能包含字段。要访问接口方法,接口必须由另一个实现”(有点像继承)。要实现接口,请使用冒号符号(与继承一样)。

32710

设计模式~责任模式

责任模式(Chain of Responsibility)是一种对象行为模式。 在责任模式里,很多对象由每一个对象对其下家引用连接起来形成一条。...责任可能是一条直线、一个环或者一个树结构一部分。 责任结构 ? 角色如下: 抽象处理者角色(Handler): 定义出一个处理请求接口。...如果需要,接口可以定义出一个方法,以设定和返回对下家引用。这个角色通常由一个java抽象或java接口实现。...责任模式实现 链结构由来 值得指出是,责任模式并不创建出责任。责任创建必须由系统其他部分创建出来。 一个可以是一条线,一个树,也可以是一个环。...DHTML事件处理

59240

Java 设计模式最佳实践:三、行为模式

我们可以维护负责不同类型操作不同类,不是在单个添加有关所有操作信息。这有助于我们保持代码松散耦合和干净。 这些称为处理器。...它负责实例化一系列处理器,然后在第一个对象上调用handleRequest方法。 Handler:这个抽象继承了所有具体Handler。...意图 迭代器模式提供了一种顺序遍历聚合对象元素不暴露其内部表示方法实现 迭代器模式基于两个抽象或接口,可以通过一对具体实现。...当我们减少依赖性时,我们可以扩展、开发和测试不同模块,不必知道其他模块实现细节。我们只需要知道它们实现抽象。 然而,模块在实践应该协同工作。一个对象变化被另一个对象知道,这并不少见。...正如我们在第一章已经学到,改变是不好扩展是好。因此,我们可以将它封装在一个不是将代码一部分替换为另一部分。然后我们可以创建代码所依赖抽象

32230

【开发基础】面向对象:抽象与接口

面向对象:抽象与接口联系 抽象(Abstract Class) 抽象体现了数据抽象思想,是实现多态一种机制。它定义了一组抽象方法,至于这组抽象方法具体表现形式有派生实现。...同时抽象提供了继承概念,它出发点就是为了继承,否则它没有存在任何意义。所以说定义抽象一定是用来继承,同时在一个以抽象为节点继承关系等级,叶子节点一定是具体实现。...在使用抽象时需要注意几点: 1、抽象不能被实例化,实例化工作应该交由它子类来完成,它只需要有一个引用 2、抽象方法须由子类来进行重写 3、...只要包含一个抽象方法抽象,该方法必须要定义成抽象 4、抽象可以包含具体方法,当然也可以不包含抽象方法。...或native并列修饰同一个方法 接口(Interface) 接口是用来建立之间协议,它所提供只是一种形式,没有具体实现

24350

Java 基础高频面试题(2021年最新版)

抽象可以有成员变量,接口中没有成员变量,只能有常量(默认就是 public static final) 抽象可以包含非抽象方法,在 Java 7 之前接口中所有方法都是抽象,在 Java...设计思想区别: 接口是自上而下抽象过程,接口规范了某些行为,是对某一行为抽象。我需要这个行为,我就去实现某个接口,但是具体这个行为怎么实现,完全由自己决定。...抽象是自下而上抽象过程,抽象提供了通用实现,是对某一事物抽象。...我们在写实现时候,发现某些实现具有几乎相同实现,因此我们将这些相同实现抽取出来成为抽象,然后如果有一些差异点,则可以提供抽象方法来支持自定义实现。...方法区是JVM规范定义一个概念,具体放在哪里,不同实现可以放在不同地方。 运行时常量池:运行时常量池是方法一部分。

51320

知识回顾:抽象抽象方法

要回答这个问题只需记住一点:如果类设计目点是用来被其它继承,并且它代表是一系列对象所具有的公共属性或方法,那么这个应该设置为抽象。 下面我们再来看另一个问题:抽象与普通有什么区别。...接口 接口是指对协定进行定义引用类型,其他类型实现接口以保证它们支持某些操作。接口指定必须由提供成员或实现其他接口。与相似接口可以包含方法、属性、索引器和事件作为成员。...抽象 在面向对象过程中所有的对象都是描绘里面的数据不足以把具体对象描绘出来,这样就是抽象,下面是抽象定义: 抽象方法只能出现在抽象,但是抽象可以包含普通方法抽象不能实例化...; 抽象抽象方法需要添加abstract关键字; 子类实现抽象方法时需添加override关键字; 如果抽象子类不是抽象,那么子类必须重写父抽象所有抽象方法。...,接口则是适合为不相关提供通用功能、接口着重于Can-Do关系类型,抽象则偏重于IS-A式关系、接口定义对象行为,抽象定义对象属性、如果要设计小简练功能块,则使用接口,如果要设计大功能单元

30240

Java常用工具之异常

Java常用工具之异常 一、异常分类 在程序开发,异常指不期各种状况。它是一个事件,当发生在 程序运行期间时,会干扰正常指令流程。...如IOException、SQLException等 Java编译器会检查这些异常,当程序可能出现这类异常时,要求 须进行异常处理,否则编译不会通过。...,ExceptionN {// 可能产生异常代码} 当方法抛出异常列表异常时,方法将不对这些类型及其子类类型 异常作处理,抛向调用该方法方法,由他去处理。...4、当子类重写父抛出异常方法时,声明异常必须是父方法所 声明异常同类或子类。...异常 有时候我们会捕获一个异常后再抛出另一个异常 顾名思义就是:将异常发生原因一个传一个串起来,即把底层 异常信息传给上层,这样逐层抛出 package com.imooc.test; public

59840

Java面向对象设计之责任模式

在此过程,客户端实际上无须关心请求处理细节以及请求传递,只需将请求发送到上即可,从而实现请求发送者和请求处理者解耦。...模式结构 参与角色 Handler(抽象处理者):处理请求接口,一般设计为具有抽象请求处理方法抽象,以便于不同具体处理者进行继承,从而实现具体请求处理方法。...):抽象处理者子类,可以处理用户请求,其实现抽象处理者定义请求处理方法。...UML图 代码示例 首先,责任模式核心在于对请求处理者抽象。在实现过程抽象处理者一般会被设定为抽象,其典型实现代码如下所示: /** * 责任连模式抽象处理者角色....它们仅需保持一个指向其后继者引用,不需保持它所有的候选接受者引用; 增加新请求处理很方便。 缺点 不能保证请求一定被接收。

47840

前端设计模式系列-基本原则

可以通过放置 hook 、使用回调函数方式达到扩展目的。 之前讲 发布订阅模式、模版方法模式、策略模式、职责模式 都有体现。...这个原则告诉我们在继承时候,如果要实现一个新功能,不要去覆盖父已经实现方法,而应该去写一个新方法。 平常前端开发很少去写和继承,这个原则用比较少。...举个例子就是 A 接口有 5 个方法,B 实现 A 接口,但 B 只用到其中 3 个方法,此时可以考虑对 A 接口进行拆分。 js 没有接口,忽略。...简单说就是要对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间耦合。 其实就是经常说面向接口(或者基)编程。 但 js 没有接口和抽象,这种原则也就用不到了。...一是因为这个名字更能体现其含义,另一个原因 是“法则”给人感觉是必须强制遵守,原则只是一种指导,没有哪条原则是在实际开发 须遵守

17940

Java设计模式面试题

为什么要使用接口不是直接使用具体? 接口用于定义 API。它定义了必须得遵循规则。...接口中不允许写代码,以此来保证抽象,但是 Java 8 你可以在接口声明静态默认方法,这种方法具体。 2.java抽象与接口之间有什么区别?...1.一个可以实现多个接口 ,但却只能继承最多一个抽象。 2.抽象可以包含具体方法 , 接口所有方法都是抽象。...实现“开-闭”原则关键步骤就是抽象化。与子类继承关系就是抽象具体实现,所以里氏代换原则是对实现抽象具体步骤规范。...在Java,重载方法签名不同,重写并不是。 14.Java,嵌套公共静态与顶级有什么不同?

75620

Java面试参考指南(一)

例如,一个list对象可以通过泛型来接收它所包含数据类型: ? 为什么在Java里我们不能覆盖静态(static)方法? 覆盖依赖于具体实例。...多态关键之处在于你可以继承一个该类子类所定义实例对象又可以对父定义方法进行了覆盖。静态方法是不依赖与具体实例,因此覆盖这一概念不适用于静态方法。...接口和抽象之间区别 接口是一种协议,要实现接口需要根据接口中定义地来实现接口,它只是一个提供了方法声明空壳; 抽象定义了一些通用方法,其子类可以定义新具体或特殊方法抽象方法和参数可以被定义成任何可见性...,接口中所有方法须由public可见性修饰符定义; 继承一个抽象,子类需要实现其中抽象方法,然而接口可以扩展另一个接口而无需实现其中方法; 子类只能继承单个抽象一个接口或可以实现多个接口...; 继承抽象子类可以以相同或更低可见性实现抽象方法实现接口只能以与原抽象方法相同可见性实现接口中方法; 接口没有构造函数,抽象有; 接口中变量都是final型抽象可以包含非

67530

更优框架中间件实现

前言 前几个周前前后后阅读了4个go框架(iris、gin、echo、beego)生命周期,阅读过程对它们在框架中间件实现颇有印象,总觉着实现不是很完美。 为什么呢?...不同对象不同实现 需要抽象(是个抽象方法) SetNext 成员方法 设置下一个对象方法 具体不变 统一定义复用,比如直接继承父 Run 成员方法 执行当前&下一个对象 具体不变 统一定义复用,比如直接继承父...理论上按照上面的建模过程,我们可以抽象出一个抽象具体Handler继承这个抽象,再实现具体抽象方法Do即可,无需在再在业务代码手动调用下一个对象(优雅、低接入成本)。...接口 Next结构体实现具体nextHandler成员属性、SetNext成员方法、Run成员方法 业务Handler实现具体Do成员方法,业务Handler合成复用NextnextHandler...合成复用Next 2.实现具体Do,是不是很简单和优雅。接着我们用实际代码来证明这个简单、清晰、优雅。

81920

Activiti工作流学习笔记(四)——工作流引擎责任模式建立与应用原理

在这种模式,通常每个接收者都包含对另一个接收者引用。如果一个对象不能处理该请求,那么它会把相同请求传给下一个接收者,依此类推。 这个概念术语比较抽象。...具体处理者(Concrete Handler)角色:实现抽象处理者处理方法,判断能否处理本次请求,如果可以处理请求则处理,否则将该请求转给它后继者。...客户(Client)角色:创建处理,并向具体处理者对象提交请求,它不关心处理细节和请求传递过程。...二、Activiti工作流里责任模式创建 最近在研究Activiti工作流框架,发现其所有实现都是采用命令模式实现命令模式当中Invoker角色又是采用拦截器链式模式,即类似上面提到过滤器...,先循环获取List集合里拦截器对象chain.get(i),然后通过setNext()方法在该拦截器对象chain.get(i)里设置下一个拦截器引用,这样,就可实现责任里所谓每个接收者都包含对另一个接收者引用功能

1.6K41

Java易错知识点总结(四)

目录 1.继承 1.Java只支持单继承,不支持多继承 2.Java支持多层继承 2.接口 1.接口不可以实现另一个接口 2.接口可以继承另一个接口 3.接口可以继承多个接口 4.接口不可以继承一个抽象...5.抽象可以实现多个接口 6.可以多实现接口 7.一个应该先继承实现接口 3.抽象抽象方法 易错知识 抽象方法关键字abstract不能与private,final,static共存...可以有抽象方法,也可以有非抽象方法 一个非抽象是某个抽象子类,那么他必须重写父抽象方法 抽象可以有构造函数 抽象是不能实例化,可以靠非抽象子类来实例化 抽象方法关键字abstract...不能与private,final,static共存 抽象方法须由子类来实现,不能加private final修饰方法不可以被覆盖(重写) static方法是由实现 4.接口定义与实现...;abstract既可以有常量也可以有变量 abstract可以有非abstract方法接口不可以

22810

设计模式----责任模式

责任模式 引言 责任模式定义 图 角色 核心 示例代码 1、对请求处理者抽象 2、对请求处理者抽象 3、责任创建 责任实现请假案例 案例图 可扩展性 纯与不纯责任模式 纯责任模式...责任模式主要包含如下两个角色 Handler(抽象处理者):处理请求接口,一般设计为具有抽象请求处理方法抽象,以便于不同具体处理者进行继承,从而实现具体请求处理方法。...):它是抽象处理者子类,可以处理用户请求,在具体处理者实现抽象处理者定义抽象请求处理方法,在处理请求之前需要进行判断,看是否有相应处理权限,如果可以处理请求就处理它,否则将请求转发给后继者...同时,在抽象处理者还声明了抽象请求处理方法,以便由子类进行具体实现。...,通过对请求进行判断以便做出相应处理,因此,其一般具有两大作用: 处理请求,不同具体处理者以不同形式实现抽象请求处理方法 handleRequest(); 转发请求,若该请求超出了当前处理者权限

58850

vn.py源码解读(九、策略代码解析)

说到这个最重要了。这个说白了就是策略实现。和绝大部分回测框架一样,策略想法是一个抽象,一般会继承一个基础模板,每一个真实运行策略就是这个策略想法一个实例。...这里,在nvpy框架下,策略className要和策略名一样。       vnpy作者例子,喜欢用变量来设置一些策略参数,个人觉得其实不是很合适。...,不是实例变量。...,那么另一个实例变量值也是会变,因为,保存在变量空间中!...() # 回测忽略这一方法 4、策略开始于结束回调函数  def onStart(self): """启动策略(必须由用户继承实现)""" self.writeCtaLog

3.5K10

Netty in Action ——— Netty组件和设计

ChannelHandlers接收事件,执行已经实现处理逻辑,并传递处理后数据到下一个处理器(ChannelHandler)。...这两个抽象简单实现了所以方法:通过调用ChannelHandlerContext对应方法将事件传递给下一个handler。你能继承这类并重写你所感兴趣方法。...为什么使用适配器 这些适配器最大程度上帮助我们减小了自定义ChannelHandler工作量,因为他们提供了对应接口所有方法默认实现。...Netty提供了多种类型编码和解码抽象,对应于具体需求。还提供了将消息转换成另一种中间格式,不立即转换成字节,这样编码器需要不同来派生。...在这个处理器,你将重写一个或多个基方法并获取一个ChannelHandlerContext引用,该ChannelHandlerContext引用会作为一个参数在所有的处理器方法

79140

day5(面向对象2)

而且子类中所有的构造函数默认第一行都是super() 为什么子类一定要访问父构造函数?...5.抽象 当多个中出现相同功能,但是功能主体不同,这时可以向上抽取,这时只能抽取功能定义,不抽取功能主题 抽象:看不懂 抽象特点: 抽象方法一定在抽象。...抽象方法抽象都必须被abstract关键字修饰。 抽象不可以用new创建对象,因为调用抽象方法没意义。 抽象方法要被使用,必须由子类复写起所有的抽象方法之后,建立子类对象调用。...6.模板方法设计模式 在定义功能时,功能一部分是确定,但是有一部分功能时不确定确定部分在使用不确定部分,就将不确定部分暴露出去, 7.接口 接口:初期理解,可以认为是一个特殊抽象抽象方法都是抽象...需要被子类实现,子类对接口中抽象方法全部覆盖后,子类才可以实例化。

32120

Java 面向对象设计六大原则

这样当发生修改时候,我们就直接用抽象了派生一个具体实现修改。 里氏替换原则 里氏替换原则是一个非常有用一个概念。...细节就是实现,也就是实现了接口或者继承了抽象。他是可以被实例化。高层模块指的是调用端,底层模块是具体实现。...我们知道在Java中一个具体实现了一个接口,那必然就要实现接口中所有方法。如果我们有一个A和B通过接口I来依赖,B是对A依赖实现,这个接口I有5个方法。...那么是实现接口时候,B就要有实现他不需要方法4和方法5 D就要实现他不需要方法2,和方法3。这简直就是一个灾难设计。...其中,我们称出现成员变量、方法参数、方法返回值为直接朋友,而出现在局部变量不是直接朋友。也就是说,陌生最好不要作为局部变量形式出现在内部。

51820
领券