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

我们应该总是支持多态性而不是枚举吗?

在软件开发中,多态性是一种允许对象采用多种形式的特性。多态性使得程序更加灵活和可扩展,因为它允许使用一个通用接口来表示不同类型的对象。当我们应该支持多态性而不是枚举时,以下是一些建议:

  1. 多态性可以提高代码的可重用性和可扩展性。当需要处理多种类型的对象时,使用多态性可以减少重复代码,并允许在不修改现有代码的情况下添加新的对象类型。
  2. 多态性可以提高代码的可读性和可维护性。当使用多态性时,代码更容易理解和维护,因为它使用通用接口来表示不同类型的对象。
  3. 多态性可以提高程序的性能。当使用多态性时,程序可以更快地运行,因为它可以避免不必要的代码重复和条件语句。

总之,在软件开发中,多态性是一种强大的工具,可以帮助开发人员编写更加灵活、可扩展、可读性高和性能更优的代码。因此,在大多数情况下,我们应该支持多态性而不是枚举。

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

相关·内容

为什么我们的机器学习平台支持Python,不是R

前言 免责声明:以下内容是基于作者的观察——不是一个行业的学术调查。 有很多文章比较了Python和R在数据科学方面的相对优点。但是这并不在这篇文章的讨论范围。...简单的说法是,机器学习工程师本质上是软件工程师,他们使用的是为软件工程而设计的编程语言,不是统计学。这可能听起来相当明显,但它代表了机器学习生态系统中的一个变化,一个值得深入研究的变化。...负责它们的人不是数据分析师,而是工程师(就职责而言,不是头衔而言),他们使用的是软件工程师熟悉的工具和语言,比如Python。R始终是生成仪表板和报告的有效工具。...我们关注的不是设计新模型,而是工程问题,比如: 与流行的机器学习框架集成的最佳语言是什么?---Python 哪种语言最适合编写请求处理代码?---像Python这样的通用语言。...换句话说,我们为机器学习工程师不是数据分析师建立了一个平台,这意味着我们支持Python不是R。 ? ·END·

65210

我们真正该关注的应该是产品开发的效率与质量, 不是工程实践或敏捷的价值

我想, 全世界没有在度量工程实践价值的这件事, 都是在度量产品开发的效率与质量。 当然,提升产品开发效率与质量的方法或工程实践有无限多个。 所以,我所要做的事是: 1....能为团队 “设计” 出团队所需要的工程实践;不是要求团队去执行,去照单全收,某一个或某一些的工程实践。 2....我这再强调ㄧ下:我不是要去证明所设计的工程实践对团队有没有价值?而是要能掌握所设计的工程实践,对团队的影响,而要能持续的去改善。...而与工程实践的本身是无关的; 也就是说,耗费宝贵的时间与精力,去度量工程实践的价值,期望能借由所谓工程实践的价值,使团队能持续的使用工程实践,是一点意义都没有的。 我们为何一定要要求团队ㄧ定要如何?...所以,产品级敏捷、微服务产品级敏捷最主要的目的是期望: 团队能不断的去思考;不是制式化的去做某个或某些的工程实践。

60560

开发有效地 Java微服务需要Effective Java

Effective Java – 回到“基础” 随着JVM生态系统比以往任何时候都快,我们很容易忘记编写好的软件不仅仅是正确使用框架。 在编写代码时,我们应该经常考虑一些关键问题。...在执行代码评审时,我总是喜欢问这些问题: 代码是否可读且易于理解可维护的代码代码是正确的它是否遵循公认的最佳实践如果您是一位经验丰富的Java开发人员,那么您可能已经具备了帮助您回答这些问题的直觉和知识...我们从现代微服务框架中获得的速度不应该阻止我们编写高质量的代码。服务的编写速度可能很快,但可能会维持数年。开发人员花在阅读代码上的时间要比编写新代码多得多。...Java不是一种新语言,我们知道好的Java是什么样子的。通过更新“有效的Java”以涵盖Java 9,您可以得到如何编写良好的现代Java的专家建议。 这本书的内容包括 这本书具体包括哪些内容?...泛型——深入研究泛型和多态性枚举和注释——解释语言中经常被误解和未充分使用的特性。 Lambdas和Streams——如何处理Java 8的新特性。 方法——解释了使用方法的良好规则。

40120

最有价值的50道java面试题(一)

方法重载(overload)实现的是编译时的多态性(也称为前绑定),方法重写(override)实现的是运行时的多态性(也称为后绑定)。...受保护(protected)对子类相当于公开,对不是同一包中的没有父子关系的类相当于私有。 3、String 是最基本的数据类型? 答:不是。...很多时候我们可能都需要用&&不是&,例如在验证用户登录时判定用户名不是null而且不是空字符串,应当写为:username != null &&!...(Java中支持带标签的break和continue语句,作用有点类似于C和C++中的goto语句,但是就像要避免使用goto一样,应该避免使用带标签的break和continue,因为它不会让你的程序变得更优雅...补充:继承String本身就是一个错误的行为,对String类型最好的重用方式是关联(HAS-A)不是继承(IS-A)。

943101

写出优质Java代码的4个技巧

本文我们将介绍一些有助于解决常见问题的通用设计策略和目标实现技术,即: 只做有目的性的优化 常量尽量使用枚举 重新定义类里面的equals()方法 尽量多使用多态性 值得注意的是,本文中描述的技术并不是适用于所有情况...因为没有目标做的优化所耗费的时间,都是在浪费时间。 作为一名身经百战的开发人员,我们应该认真对待这一观点。第一次猜测不仅没有提高系统的性能,而且90%的开发时间完全是浪费了。...值得注意的是,举这个例子事项说明如果是常量,则应该尽量使用枚举,但并不是说什么情况下都应该使用枚举。在某些情况下,可能希望使用一个常量来表示某个特殊值,但是也允许提供其它的值。...我们应该在类的内部初始化这个逻辑,不是通过系统将Purchase类的身份逻辑进行过多的传播。...我们可以使用多态来隐式地做出决策,不是使用账户类型用来区分。为了做到这一点,我们将BankAccount的具体类转换成一个接口,并将决策过程传入一系列具体的类,这些类代表了每种类型的银行帐户: ?

80370

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

总是不死心,它应该有点用吧,不然创造Java的这伙传说中的天才不成了傻子了吗? 接下来,我们来写一个小游戏。俄罗斯方块!我们来分析一下它需要什么类? 我知道它要在一个矩形的房子里完成。...先把这个问题放到一边去,我们回到房子这个类中。 房子上面总是有方块落下来,房子应该有个属性是方块。当一个方块死掉后,再创建一个方块,让它出现在房子的上面。...我们写一个方块类,用它来派生出6个子类。房子类的当前方块属性的类型是方块类型。它可以指向任何子类。但是,当我调用当前方块的翻转方法时,它的子类都有?...我们知道'田'方块,它只有一种状态,无论你怎么翻转它。长条的方块有两种状态。一种是‘-’,另一种是‘|’。这可怎么办呢?我们知道Java的多态性,你可以让子类来重写父类的方法。...最后我会大骂你一句,你是来欺骗我的,你这个白痴。 把那些和“东西”差不多的类写成抽象的。水杯一样的类就可以不是抽象的了。当然水杯也有几千块钱一个的和几块钱一个的。

1.6K90

2019年Java面试题基础系列228道(1),快看看哪些你还不会?

16、我们能创建一个包含可变对象的不可变对象? 17、Java 中应该使用什么数据类型来代表价格? 18、怎么将 byte 转换为 String?...为什么要使用接口不是直接使用具体类? 104、Java 中,抽象类与接口之间有什么不同? 105、除了单例模式,你在生产环境中还用过什么设计模式? 106、你能解释一下里氏替换原则?...方法重载(overload)实现的是编译时的多态性(也称为前绑定),方法重写(override)实现的是运行时的多态性(也称为后绑定)。...3、String 是最基本的数据类型不是。...很多时候我们可能都需要用&&不是&,例如在验证用户登录时判定用户名不是 null 而且不是空字符串,应当写为:username != null &&!

1.1K00

Java面试之基础及语法

* 回想单例设计模式 单例类是一个类只有一个实例 * 那么多例类就是一个类有多个实例 但不是无限个数的实例 而是有限个数的实例 这才能是枚举类 * JVM默认是如何处理异常的 * 当main方法收到这个问题是就有两种处理方式...3、String 是最基本的数据类型? 【基础】 答:不是。 4、float 型float f=3.4是否正确?...通常的内部类需要在外部类实例化后才能实例化。 31、java 中会存在内存泄漏,请简单描述。【基础】 答:会;存在无用但可达的对象,这些对象不能被GC 回收,导致耗费内存资源。...“我AB”,输入(“我ABC 汉DEF”,6)应该输出为“我ABC”不是“我ABC+汉的半个”。...Assertionerror if a <= 0 断言可以有两种形式: assert Expression1 ; assert Expression1 : Expression2 ; Expression1 应该总是产生一个布尔值

43530

Java面试题-01前言:面试题:总结:

比如有三个类,"门"、"警报"、"警报门","警报门"也是"门",所以"门"应该是抽象类,"警报门"is a"门";"警报门"还会发出警报,有"警报"的功能,但是我们不能说"警报门"是"警报",他们的关系是...多态:多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。比如"水果 a = new 苹果()",这就用到了多态性。...区别: ①、包装类创建的是对象,拥有方法和字段.对象的调用都是通过引用对象的地址 ;基本类型不是。...6、short s1 = 1; s1 = s1 + 1;有错?short s1 = 1; s1 += 1;有错?...很多时候我们可能都需要用&&不是&,例如在验证用户登录时判定用户名不是null而且不是空字符串,应当写为:username != null &&!

71450

什么是java的多态

现实中,关于多态的例子不胜枚举。...a1.show(b); a1.show(c); a2.show(b); a2.show(c); 结果如下: 对于前两条语句的结果我们很容易理解,那第三条和第四条的,为什么结果和我们想的不一样,不应该是...要理解这是为什么,我们要先理解下面这句话: 当超类对象引用变量引用子类对象时,被引用对象的类型不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法...它说:当超类对象引用变量引用子类对象时,被引用对象的类型不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。...这就是那句话的意义所在,到这里,我们可以清晰的理解Java的多态性了。 6. 最后一个练习! 看下面的例子: 上面例子中的输出是什么呢?答案是:ai ni 有了前一个例子我们就会很容易理解这个例子。

50920

【Rust 易学教程】第 1 天:Rust 基础,基本语法

尽管只有29行代码,但这个 C 语言示例中至少有 11 行包含了严重的错误: 赋值=不是相等比较==(第28行) printf 的多余参数(第23行) 文件描述符泄漏(在第26行之后) 多行 if 中忘记使用大括号...分配的缓冲区导致内存泄漏(第21行) 越界访问(第17行) 未检查 switch 语句中的情况(第11行) 未检查stat 和 fopen 的返回值(第18行和第26行) 即使对于 C 编译器,这些错误也不应该很明显...这不是一个非常不现实的例子? 绝对不是,这类错误在过去会导致严重的安全漏洞。...切片总是从另一个对象借用。在本例中,a 必须保持“活动”(在作用域中)至少与我们的切片一样长。...函数重载 不支持重载: 每个函数有一个单独的实现: 总是有固定数量的参数。 总是接受一组参数类型。 不支持默认值: 所有调用站点都具有相同数量的参数。 有时使用宏作为替代方法。

25320

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

什么是多态性? “多态性”一词意味着具有许多形式。它是某些代码根据不同的上下文表现出不同行为的属性。例如,在C++语言中,我们可以定义具有相同名称但根据上下文而有不同工作方式的多个函数。...声明性编程范式 声明性编码侧重于执行内容不是如何执行内容。在这种模型中,我们表达计算逻辑不考虑其控制流。...抽象类不支持多重继承。 一个接口支持多重继承。 21.一个类占用多少内存? 类不使用内存。它们只是作为创建项目的模板存在。...我们可以使用finalize()方法作为Java析构函数的替代方法,但自Java 9起该方法也已被弃用。 27. 我们可以在一个类中重载构造函数我们可以在类中重载构造函数。...我们可以在一个类中重载析构函数? 不。在一个类中不能重载析构函数。一个类中只能有一个析构函数存在。 29. 什么是虚函数? 虚函数是用于在派生类中覆盖父类方法的函数。它用于提供类的抽象。

30941

Java---常用基础面试知识点

If(x==33 & ++y>0) y会增长,If(x==33 && ++y>0)不会增长, &还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f...最大的不同是,Hashtable的方法是Synchronize的,HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,HashMap 就必须为之提供外同步。...finally是异常处理语句结构的一部分,表示总是执行。...重写Overrid是父类与子类之间多态性的一种表现,重载 Overload是一个类中多态性的一种表现。 如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overrid)。...2 << 3,因为将一个数左移n位,就相当于乘以了2的n次方,那么,一个数乘以8只要将其左移3位即可,位运算cpu直接支持的,效率最高,所以,2乘以8等於几的最效率的方法是2 << 3。

37430

从汇率转换通用解决方案到可复用设计思想

因此,DAX 的度量值支持用封装的思想进行设计。...从这个意义上来说,我们选择支持多形性的自助商业智能分析工具,DAX 具备这个特点,其他的,可以自行评估。...可见,在实际中,不是一个个特性单独使用,往往是一连串一起用,这种优美,你体会到了吗? 汇率转换设计模式 有了封装继承多态,我们就可以更好更本质地思考和进行设计了。...从使用的目的去界定事实表,维度表,可以启发设计师看到某表时应该怎样思考,具有很好的作用。在这里,汇率的目的不是事实,而是参考,因此,不作为事实表看待。...从多态性的角度: 度量值,保存最完整的多态性,但性能降低。 预计算,保存最快的聚合速度,但失去多态。 因此, 倾向于多态性,则应该使用度量值。 倾向于高性能,则应该尽量预计算。

1.3K20

总结---3

● 运行时的多态性 运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。C#中,运行时的多态性通过虚成员实现。...编译时的多态性我们提供了运行速度快的特点,运行时的多态性则带来了高度灵活和抽象的特点。 2:析构函数是虚函数的优点是什么?...当然,并不是要把所有类的析构函数都写成虚函数。因为当类里面有虚函数的时候,编译器会给类添加一个虚函数表,里面来存放虚函数指针,这样就会增加类的存储空间。...枚举与#define 宏的区别 1)#define 宏常量是在预编译阶段进行简单替换。枚举常量则是在编译的时候确定其值。 2)一般在编译器里,可以调试枚举常量,但是不能调试宏常量。...3)枚举可以一次定义大量相关的常量,#define 宏一次只能定义一个。

82970
领券