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

在什么情况下超类不应该是抽象的?

在以下情况下,超类不应该是抽象的:

  1. 当超类需要被实例化:如果需要直接创建超类的对象,而不是通过子类来创建对象,那么超类不能是抽象的。抽象类不能被实例化,只能被继承和扩展。
  2. 当超类的实现需要提供默认行为:抽象类可以包含具体的方法实现,这些方法可以提供默认行为。如果超类需要提供一些通用的实现逻辑,那么它不能是抽象的。
  3. 当超类的实现需要被多个子类共享:如果多个子类需要继承同一个超类,并且共享相同的实现逻辑,那么超类不能是抽象的。抽象类可以作为多个子类的公共基类,提供共享的实现。
  4. 当超类需要被用作类型检查:如果需要将超类作为参数类型或返回类型,进行类型检查或多态操作,那么超类不能是抽象的。抽象类可以作为类型引用,用于多态性。
  5. 当超类的实现需要被修改或扩展:如果超类的实现可能会发生变化,并且需要在子类中进行修改或扩展,那么超类不能是抽象的。抽象类可以被子类继承和扩展,以适应不同的需求。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):提供可扩展的计算能力,满足各种业务需求。产品介绍链接
  • 腾讯云云数据库 MySQL 版:可靠、可扩展的关系型数据库服务。产品介绍链接
  • 腾讯云对象存储(COS):安全、稳定、高扩展性的云端存储服务。产品介绍链接
  • 腾讯云人工智能(AI):提供多种人工智能服务和解决方案,如图像识别、语音识别、自然语言处理等。产品介绍链接
  • 腾讯云物联网(IoT):提供全面的物联网解决方案,包括设备接入、数据管理、应用开发等。产品介绍链接
  • 腾讯云区块链服务(BCS):提供简单易用的区块链服务,帮助构建可信赖的区块链应用。产品介绍链接
  • 腾讯云视频处理(VOD):提供视频上传、转码、截图、水印等功能,满足视频处理需求。产品介绍链接
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

抽象和接口什么情况下适用?

问题: 到底什么时候该用抽象什么时候该用接口呢? 如何区分使用抽象和接口 大家比较抽象和接口区别时,一定要强调抽象描述是事物本质,而接口描述是事物功能。...比如:保温杯是水杯,所以水杯应该设计为抽象,保温杯有保温功能,所以保温应该设计为接口。...可理解为: class 保温杯 extends 水杯 implements 保温 用实例说话 package zmldemo;//水杯抽象public abstract class Cup {...name, color); } @Override public void useCup() { System.out.println("我是"+this.color+""...+this.name+","+"我是用来喝水"); } @Override public void baoWen() { System.out.println("我能对水杯里水进行保温

51620

抽象和接口什么情况下适用?

前言 上篇文章《抽象不能实例化》中,我文章最后顺嘴提了一下接口,就是当时讲抽象时候说接口也是抽象,是个特殊抽象。 结果怎么着,那个学弟又问我了:“学长,抽象和接口有什么区别呢?”...问题: 到底什么时候该用抽象什么时候该用接口呢? ? ? ? 如何区分使用抽象和接口 大家比较抽象和接口区别时,一定要强调抽象描述是事物本质,而接口描述是事物功能。...比如:保温杯是水杯,所以水杯应该设计为抽象,保温杯有保温功能,所以保温应该设计为接口。...可理解为: class 保温杯 extends 水杯 implements 保温 用实例说话 package zmldemo; //水杯抽象 public abstract class Cup...我想看完这个例子,抽象和接口大家应该能理解了。

34600
  • 举例说明什么抽象!让抽象不再抽象!!

    抽象之所以比较难理解,大概就是因为他太抽象了吧,哈哈,这好像是废话。。 虽然很早之前就知道这个抽象概念,但是一直纠结于一个问题:你这个抽象实际开发过程中到底有个毛线用??...从上面可以看出,老夫为了新添加一个技能,Swordsman里新加了一个字段knock,选择技能和释放技能处分别多加了一个else if,还不错可以顶得住!!...这时候,一直偷偷爱慕我香蕉君教给我了一个新技能 -- 抽象!! ? 于是,我用新思想开始了抽象之旅: 第一步:定义技能 首先,定义一个抽象AbstractSkill。...老夫把什么上挑、鬼斩、崩天击、大吸全都抽象成一个,名为AbstractSkill,同时里面存在一个技能音效方法,但是释放什么音效呢?答案是没有音效。...; } } 所以呢,有了抽象后只需要添加抽象下属即可,别的压根不用改,这一下子省了多少工夫啊!!!

    52110

    抽象作用是什么

    一、什么抽象 面向对象概念中,所有的对象都是通过来描绘,但是反过来,并不是所有的都是用来描绘对象,如果一个中没有包含足够信息来描绘一个具体对象,这样就是抽象。...Java中抽象表示是一种继承关系,一个只能继承一个抽象,而一个却可以实现多个接口。 二、为什么要用抽象抽象什么用? 老是在想为什么要引用抽象,一般不就够用了吗。...当然你也可以把抽象都写成非抽象,但是这样没有必要。 而写成抽象,这样别人看到你代码,或你看到别人代码,你就会注意抽象方法,而知道这个方法是子类中实现,所以,有个提示作用。...三、抽象和接口区别 抽象 抽象是用来捕捉子类通用特性 。它不能被实例化,只能被用作子类抽象是被用来创建继承层级里子类模板。 接口 接口是抽象方法集合。...抽象和接口对比 什么时候使用抽象和接口 1、如果你拥有一些方法并且想让它们中一些有默认实现,那么使用抽象吧。 如果你想实现多重继承,那么你必须使用接口。

    91330

    java接口和抽象异同_抽象控制符是什么

    static修饰方法也是非抽象方法,使用同类静态方法一样,给方法调用带来了方便。程序入口main方法也是static,现在接口也可以运行了。...例如下面InterfaceA中定义了一个default方法,一个static方法: public interface InterfaceA { default String f()...return"this is InterfaceA"; } static String getName(){ return "InterfaceA"; } } 那么实现中可以直接调用接口...、返回类型时,当该类未重写方法,直接调用时,将会调用父方法: 再定义一个父FatherC,拥有和InterfaceA同签名、返回类型方法f() public class FatherC {...,所以现在接口和抽象区别有: 虽然接口和抽象都不能被实例化,但是抽象可以有构造器,接口没有构造器 抽象单继承(只能继承一个),接口多继承(能继承多个接口) 抽象中方法可以有public、protected

    26440

    java中什么抽象方法和抽象及他们特点

    7.何为抽象方法和抽象?  马 克 -to -win:方法前有个abstract修饰符,就叫抽象方法。前有个abstract修饰符就是抽象,完了,简单就好记。...以下是二者要点:马 克 -to -w in : 1)抽象方法没有函数体。有童鞋说,这有什么意义呢?比如下面的例子,当我们不知道现在是什么车时,你让我写驾驶(steer)这个方法,我怎么写呢?...这种场合就需要抽象方法。 2)抽象(Veh)子类(Lim)只要不是抽象,马克-to-win:它自己(Lim)或它(Car)必须把那个抽象抽象方法全部实现掉。...3)抽象不能被实例化。字面上好理解,抽象东西那么抽象,看不见摸不着,当然不能被实际具体生成了。还是举上面的例子。...当我们现在连什么车都不知道时,也不知道它是自行车还是豪华轿车时,你让我具体地生成这辆车,当然是不可能了。

    60730

    Java中抽象与接口区别是什么

    抽象与接口区别 1. 共同点 都可以包含抽象方法; 2....区别 抽象是一种“”,是使用class作为关键字来声明;而接口是另一种数据,是使用interface作为关键字来声明抽象中可以有各种权限不同、修饰符不同属性,也可以包含普通方法、抽象方法...,或者完全没有普通方法,或者完全没有抽象方法;而接口中所有成员都是public,所有属性都是static、finalJDK 1.8之前,所有的方法都是抽象; 普通抽象关系是“继承”...关系,当普通继承了抽象后,就有义务重写抽象抽象方法,Java语句中,之间继承是1对1关系;普通与接口关系是”实现“关系,当普通实现了接口后,也有义务重写接口中所有抽象方法...使用心得 / 装 ,是描述”类别“;接口,是描述形为模式、行为特征、规范、标准之间是is a关系;与接口之间是has a关系。

    40920

    面试题:接口和抽象区别是什么?

    接口方法默认是 public,所有方法接口中不能有实现(Java 8 开始 接口方法可以有默认实现),抽象可以有非抽象方法 接口中实例变量默认是 final 类型,而抽象中则不一定...一个可以实现多个接口,但最多只能实现一个抽象10 一个实现接口的话要实现接口所有方法,而抽象不一定 接口不能用 new 实例化,但可以声明,但是必须引用一个实现该接口 对象...从设计层面来说,抽象是对抽象,是一种模板设计,接口是行为 抽象,是一种行为规范。...实 现和实现是不可以调用。如果同时实现两个接口,接口中定义了一样默认 方法,必须重写,不然会报错。

    20740

    接口(interface)和抽象(abstract class)区别是什么

    接口中方法默认都是 public,所有方法接口中不能有默认实现(Java8 开始接口方法可以有默认实现),而抽象可以有非抽象普通方法; 接口中除了 static、final 变量,不能有其他变量...,而抽象中则不一定; 一个可以实现多个接口,但只能继承一个抽象,接口本身可以通过 extends 关键字扩展多个接口; 接口方法默认修饰符是 public,抽象方法中则可以有 public、protected...和 default 这些修饰符(抽象方法就是为了被重写,所以不能使用private关键字修饰); 从设计层面来说,抽象是对抽象,是一种模板设计,而接口是对行为抽象,是一种行为规范。

    88840

    面试:抽象和接口异同到底是什么

    java中,通常初学者搞不懂接口与抽象,这也是面试比较容易问到一个问题。下面我来谈谈自己理解。如有不妥之处,还望批评指正,不胜感激。 1.抽象怎么定义和继承? 2.接口怎么定义和实现?...: 抽象不能被实例化,比如: 子类可以实现抽象方法,也可以不实现,也可以只实现一部分,这样跑起来都是没有问题,不实现的话,调用是默认使用抽象空实现,也就是什么都没有输出,要是抽象有实现...比如: 抽象中可以有具体方法以及属性(成员变量) 抽象和普通之间有很多相同地方,比如他们都可以都静态成员与静态代码块等等。 2.接口怎么定义和实现?...,也可以实现中实现 接口增加新方法必须在接口中声明,然后实现中进行实现 抽象不能直接创建对象 接口也不能直接创建对象 ,可以赋予实现对象 抽象可以有main方法,而且我们可以直接运行,抽象也可以有构造器...接口不能有main方法,接口不能有构造器 那么我们什么时候使用接口什么时候使用抽象呢?

    41421

    (20) 为什么要有抽象? 计算机程序思维逻辑

    基本概念 上节提到了一个概念,抽象抽象什么呢?...抽象不能创建对象,要创建对象,必须使用它具体子类。一个继承抽象后,必须实现抽象中定义所有抽象方法,除非它自己也声明为抽象。...为什么需要抽象抽象方法和抽象看上去是多余,对于抽象方法,不知道如何实现,定义一个空方法体不就行了吗,而抽象不让创建对象,看上去只是增加了一个不必要限制。...比如说,Java库中,有: Collection接口和对应AbstractCollection抽象 List接口和对应AbstractList抽象 Map接口和对应AbstractMap抽象...目前关于描述中,每个都是独立,都对应一个Java源代码文件,但在Java中,一个还可以放在另一个内部,称之为内部类,为什么要将一个放到别的内部呢?

    1.5K71

    【JavaSE专栏64】抽象和接口,不能被实例化什么用?

    ---- 一、什么抽象 Java 中,抽象是指不能被实例化,它只能被用作其他。...---- 二、什么是接口 Java 中,接口是一种抽象类型,它定义了一组方法签名,但没有实现这些方法具体实现代码。...---- 四、抽象和接口面试题 抽象和接口区别是什么?它们何时使用? 一个可以同时继承抽象和实现接口吗?为什么抽象是否可以没有抽象方法?接口是否可以没有方法?...抽象和接口成员变量有什么区别? 接口可以继承接口吗?抽象可以继承抽象吗? 接口中,可以定义静态方法吗?抽象中呢? 抽象和接口多态性方面有何不同? 为什么 Java 中不支持多继承?...接口是如何解决这个问题 Java 8 中,接口添加了哪些新特性? 什么情况下应该使用抽象什么情况下应该使用接口?

    43820

    没有 try-with-resources 语句情况下使用 xxx 是什么意思

    没有使用 try-with-resources 语句情况下使用 xxx,意味着代码中没有显式地关闭 xxx对象资源,如果没有使用 try-with-resources,那么使用xxx对象后,需要手动调用...语句中,可以自动管理资源关闭。...使用 try-with-resources 语句时,可以 try 后面紧跟一个或多个资源声明,这些资源必须实现了 AutoCloseable 或 Closeable 接口。... try 代码块执行完毕后,无论是否发生异常,都会自动调用资源 close() 方法进行关闭。...使用 try-with-resources 可以简化资源释放代码,并且能够确保资源使用完毕后得到正确关闭,避免了手动关闭资源可能出现遗漏或错误。

    3.1K30

    【Java学习笔记之二十一】抽象Java继承中用法小结

    一、抽象基本概念 普通是一个完善功能,可以直接产生实例化对象,并且普通中可以包含有构造方法、普通方法、static方法、常量和变量等内容。...而抽象是指在普通结构里面增加抽象方法组成部分。 那么什么抽象方法呢?在所有的普通方法上面都会有一个“{}”,这个表示方法体,有方法体方法一定可以被对象直接使用。...为什么不能直接实例化呢?当一个实例化之后,就意味着这个对象可以调用属性或者放过了,但在抽象里存在抽象方法,而抽象方法没有方法体,没有方法体就无法进行调用。...任何时候,如果要执行static方法时候,都可以没有对象情况下直接调用,对于抽象也一样。...(5)有时候由于抽象中只需要一个特定系统子类操作,所以可以忽略掉外部子类。这样设计系统库中会比较常见,目的是对用户隐藏不需要知道子类。

    72190

    PostgreSQL vacuum 不使用 full 情况下,为什么有时也能回收空间

    版本中,运行一下这个命令,然后将PG日志也模拟成MySQL genernal log 方式,上面就是我们记录后整体操作,这里蓝色部分是我标记,其中主要功能如下 PG接受到你要进行vacuum...full 操作时候,他会针对你要操作统计信息先进行数据写入,并且要对这个表进行快照,来发现这个表是否正在被事务占用,并且要记录当前使用他事务ID信息,如果此时没有事务对这个表进行操作,...同时会生成临时表来对数据进行周转,周转完毕后临时表会被清理掉,然后将刚才所做镜像信息恢复到新表上,整体处理完毕。...不过说到这里还没有说到主题,就是为什么vacuum 有的时候也能达到vacuum full功能,运行完毕,磁盘空间释放给操作系统。...,这个部分在每个页面的最尾部存储本页偏移量,而当vacuum 对于页面的偏移量进行更改后,会对于当前数据文件进行判断是否调用释放空间功能来释放空间,这里调用中会会对于FSM文件来进行维护,对于页面空闲空间数据重新写入

    18510

    加载器 详解:什么加载器,加载器作用及应用场景,加载时机,加载完整过程,加载器分类

    文章目录一、什么加载器、加载器作用1.1 定义与作用1.2 应用场景二、加载时机三、加载完整过程3.1 加载3.2 验证3.3 准备3.4 解析3.5 初始化3.6 使用3.7 小节四、加载分类...中两个方法【应用】4.5 小节一、什么加载器、加载器作用1.1 定义与作用加载器(ClassLoader)是Java虚拟机提供给应用程序去实现获取和接口字节码数据技术。...所有Java中实现加载器都需要继承ClassLoader这个抽象加载器设计,JDK8和8之后版本差别较大(JDK9之后,出现了模块化设计)。...加载扩展,拓展Java中比较通用,只是通用,不是特别重要,最重要启动加载器加载了。...(2)加载器作用是什么加载器(ClassLoader)负责加载器过程中字节码获取并加载到内存这一部分。

    9310

    效率编程 之「和接口」

    如果方法覆盖了一个方法,子类中访问级别就不允许低于访问级别。实例域决不能是公有的,否则我们就放弃了强制这个域不可变能力。并且,包含公有可变域并不是线程安全。...然后,如果类是包级私有的,或者是私有的嵌套,直接暴露它数据域并没有本质错误——假设这些数据确实描述了该类所提供抽象。总之,公有永远都不应该暴露可变域。 不可变只是其实例不能被修改。...在内部使用某些常量,这纯粹是实现细节。实现常量接口,会导致把这样实现细节泄露到该类导出 API 中。实现常量接口,这对于这个用户来讲并没有什么价值。实际上,这样做反而会使他们更加糊涂。...第 4 条:优先考虑静态成员 嵌套是指被定义另一个内部。嵌套存在目的应该是为它外围提供服务。如果嵌套将来可能会用于其他环境中,它就应该是顶层。...如果嵌套实例可以它外围实例之外独立存在,这个嵌套就必须是静态成员没有外围实例情况下,要想创建非静态成员实例是不可能

    71830

    PHP面向对象——三大基本特性与五大基本原则

    封装是面向对象特征之一,是对象和概念主要特性。 简单说,一个就是一个封装了数据以及操作这些数据代码逻辑实体。一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。...所谓继承是指可以让某个类型对象获得另一个类型对象属性方法,它支持按级分类概念。 继承是指这样一种能力:它可以使用现有所有功能,并在无需重新编写原来情况下对这些功能进行扩展。...通过继承创建称为“子类”或“派生”,被继承称为“基”、“父”或“”。继承过程,就是从一般到特殊过程。...开放封闭原则OCP(Open-Close Principle) 一个模块扩展性方面应该是开放而在更改性方面应该是封闭。...假设B是较A低模块,但B需要使用到A功能,这个时候,B不应当直接使用A中具体: 而应当由B定义一抽象接口,并由A来实现这个抽象接口,B只使用这个抽象接口:这样就达到 了依赖倒置目的,B也解除了对

    57110
    领券