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

创建接口和具体类并在向量中使用它们会导致调用方法时出现奇怪的行为

。这是因为在向量中存储的是对象的引用,而不是对象本身。当我们将具体类的实例存储在向量中时,可以正常调用该类的方法。但是,当我们将接口的实现类的实例存储在向量中时,由于向量无法知道具体类的类型,它只能调用接口中定义的方法,而无法调用具体类中特有的方法。

这种情况下,如果我们尝试调用具体类中特有的方法,就会出现奇怪的行为。例如,如果我们将一个实现了接口A的类的实例存储在向量中,而接口A没有定义某个方法,但是具体类中有这个方法,当我们尝试调用这个方法时,编译器不会报错,但是运行时会出现异常或者返回错误的结果。

为了避免这种奇怪的行为,我们可以采用以下几种方式:

  1. 使用泛型:在向量的定义中使用泛型,指定存储的对象类型。这样可以确保向量中只能存储指定类型的对象,避免调用方法时出现奇怪的行为。
  2. 使用类型检查:在调用方法之前,先检查对象的类型,确保调用的方法是对象实际类型中定义的方法。可以使用instanceof关键字进行类型检查。
  3. 使用接口中定义的方法:在向量中存储对象时,只调用接口中定义的方法,避免调用具体类中特有的方法。

总结起来,创建接口和具体类并在向量中使用它们可能导致调用方法时出现奇怪的行为。为了避免这种情况,我们可以使用泛型、类型检查和只调用接口中定义的方法等方式来确保代码的正确性和可靠性。

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

  • 腾讯云云服务器(CVM):提供弹性计算能力,满足各类业务需求。详情请参考:https://cloud.tencent.com/product/cvm
  • 腾讯云云数据库MySQL版:提供高性能、可扩展的MySQL数据库服务。详情请参考:https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云人工智能平台(AI Lab):提供丰富的人工智能算法和模型,支持开发者构建智能应用。详情请参考:https://cloud.tencent.com/product/ai
  • 腾讯云物联网平台(IoT Hub):提供全面的物联网解决方案,帮助连接和管理物联网设备。详情请参考:https://cloud.tencent.com/product/iothub
  • 腾讯云移动应用开发平台(MADP):提供一站式移动应用开发和运营服务,支持快速构建高质量的移动应用。详情请参考:https://cloud.tencent.com/product/madp
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JDK19都出来了~是时候梳理清楚JDK各个版本特性了【JDK16特性讲解】

@Override注释含义被扩展为包括注释方法是记录组件显式声明访问器方法情况。 为了强制使用紧凑构造函数,分配给构造函数主体中任何实例字段导致编译错误。...从广义上讲,这意味着它们对标识对行为不重要不可变对象进行编码,并且它们不提供实例创建机制,例如公共构造函数,保证每次调用具有唯一标识。...尝试使用 new Integer,new Double等创建包装实例,而不是隐式装箱或对 valueOf工厂方法调用,将产生 LinkageError。 尝试在这些实例上进行同步将产生异常。...没有一种实用方法可以自动检测忽略这些规范并依赖当前实现行为程序,但我们预计这种情况很少见。 我们可以通过弃包装构造函数来阻止(2)移除,这将放大编译对这些构造函数调用时发生警告。...原因 从 Java 1.1 开始,Java 就支持通过Java 本地接口 (JNI)调用本地方法,但这条路径一直是艰难而脆弱

1.6K50

Unity基础教程系列(九)——形状行为(Modular Functionality)

本文重点: 1、定义形状抽象具体行为 2、只在需要时候才包含行为 3、创建通用方法 4、试用条件编译 5、给枚举添加方法 6、让形状摆动起来 本教程是CatLikeCoding系列一部分,...除此之外,每个形状行为可能都有配置状态,我们需要保存和加载它们。所以也添加抽象保存和加载方法。 ? 1.2 移动 我们第一个具体形状行为组件将是关于简单线性运动。...1.6 移除行为 实例化新形状,每次生成形状添加行为效果都很好,但是当形状被回收导致行为组件重复。 ? (行为重复) 解决此问题最快方法是简单地销毁所有行为并在回收形状清除列表。...让它使用switch语句来添加正确行为组件。当我们未能添加正确类型,也让它返回null。如果我们在调用这个方法出现了一个空引用异常,这意味着我们忘记在开关中包含一个行为类型。 ?...扩展方法是静态静态方法,其行为类似于某种类型实例方法。该类型可以是任何东西,接口、结构、原始值或枚举。扩展方法第一个参数定义了该方法将要操作类型实例值。

1.3K40

JavaScript 编程精解 中文第三版 六、对象秘密

如果将关键字new放在函数调用之前,则该函数将被视为构造器。 这意味着具有正确原型对象自动创建,绑定到函数中this,并在函数结束返回。...set方法再次使用super,但这次不是调用构造器,而是从超一组方法调用特定方法。 我们正在重新定义set,但是想要使用原来行为。...实现多个它们仅在一些细节上有所不同,将新编写为现有子类,继承其一部分行为很有帮助。 6.14 习题 6.14.1 向量类型 编写一个构造器Vec,在二维空间中表示数组。...向Vec原型添加两个方法:plusminus,它们接受另一个向量作为参数,分别返回两个向量(一个是this,另一个是参数)向量与差向量。...这会起作用,但它会破坏这个练习目的。 如果分组被修改时,你迭代器在迭代过程中出现奇怪行为,那也没问题。

1.7K60

Java设计模式之状态模式

状态模式工作原理在状态模式中,每个具体状态实现了状态接口或继承了抽象状态,并重写了其中方法,以定义该状态下行为。上下文类维护一个状态对象,并在需要时调用状态对象方法来处理请求。...当状态发生变化时,上下文对象切换到新状态,并调用相应状态对象方法来处理请求。4....创建具体状态(ConcreteState):实现状态接口或继承抽象状态具体定义每个状态下行为。定义上下文类(Context):维护一个状态对象,并提供方法来切换状态处理请求。...使用状态模式:根据具体业务需求,创建具体状态上下文类,并在客户端代码中使用状态模式。5. Java中状态模式示例让我们通过一个简单例子来演示状态模式实现。...缺点:状态过多可能导致复杂性增加:如果系统中存在大量状态,可能导致状态之间关系变得复杂,增加系统理解维护成本。

50410

【笔记】《Effective C++》条款26-55

令一种是写为一个纯虚基, 所有接口都是纯虚函数用来多态调用实现具体函数. 实现头文件: 以工厂模式扮演具现化对象目标, 都有一个static初始化函数以供接口获得指向自己指针....: 所有基可以使用地方, D也可以派上用场, 尽管具体行为可能有所不同 不同行为应该用虚函数来实现, 这非常重要 应该尽可能阻断那些派生与基不同接口, 运行期方法是在派生对应函数中用...error报错, 编译期方法是额外分出细化, 然后让特定方法只在特定中有对应虚函数可重写(覆盖) 33 避免遮掩继承而来名称 当一个名称同时在小作用域大作用域中存在, C++进行遮掩...41 了解隐式接口编译期多态 普通编程时候一个所需都是显式接口(头文件声明接口)运行期多态(继承而来接口), 多数都是我们可控 模板编程时候我们看不到模板参数具体头文件声明(因为模板参数本身是未定..., 因此我们无法直接在模板调用模板化成员 有三种方法处理这个问题: 在调用函数前加上this指针this->foo();, 指针进行多态调用 using声明式using Base<Tmp

89530

设计模式——一文即可

环境(Context) 环境是策略模式核心,它持有一个策略对象引用,并在运行时根据具体需求调用策略对象算法。环境提供了一个接口方法,用于设置获取策略对象。...难以重用扩展 一个负责多种职责,可能导致代码耦合性增加,使得难以重用扩展。...装饰器与组件接口不一致 在装饰器模式中,装饰器具体组件接口不一致,导致客户端需要区分调用。...2 当需要增加新产品等级结构,需要修改抽象工厂接口所有具体工厂,破坏了开闭原则。 3 当产品族中产品种类非常多时,导致具体工厂数量增加,增加了系统维护成本。...但是,这种实现方式导致性能问题,因为每次调用 getInstance() 方法都会进行同步。

42110

先别急着“Rust重写”,可能没有说那么安全

Rust 重写问题 很多朋友并不清楚,单纯内存安全语言重写大型 C/C++ 系统组件只会引入额外攻击面:新组件现有代码间外部函数接口(FFI)。...*b; 5 *a += *b; 6 } 但遗憾是,Rust C 对于其中 a b 分别做出了不同假设,而且从 C 调用 add_twice(&bar, &bar) 导致未定义行为。...从本质上讲,Rust C/C++ 是不能直接交互——它们在类型、内存管理控制流方面都采取了截然不同方法。...Rust C 间不匹配,往往导致 FFI 边界处出现大量不安全代码——这令开发者很难安全将组件移植为 Rust 形式。...rusTLS 允许客户端创建证书验证器,并在服务器配置间共享这些验证器。为了实现共享,rusTLS 会使用原子引用计数器(Arc)来表示这些验证器,以便在不再引用验证器自动回收相应内存。

35430

Day8 面向对象编程:详解基于接口编程、组合优于继承、控制反转及SOLID五个原则

在主程序中,我们创建了DogCat实例,并调用它们make_sound方法,展示了基于接口编程灵活性多态性。...具体来说,我们可以将三角形定义为一个包含三个点对象,并将绘制方法作为一个单独来实现。然后,三角形可以将绘制对象作为成员来使用,并在需要绘制三角形时调用绘制方法。...Triangle将一个drawing_method对象作为成员变量,并在draw方法调用该对象draw_triangle方法来绘制三角形。...可维护性:组合使得代码更容易维护,因为可以在不影响其他情况下修改某个实现。而继承则可能导致代码紧耦合,修改父可能影响到子类行为。...2、缺点性能损失:面向对象编程可能导致一定性能损失,特别是在处理大量数据。代码复杂度增加:面向对象编程可能导致代码复杂度增加,特别是在处理复杂对象关系

15910

Java8编程思想精粹(十)-容器持有对象(下)

,因为这将产生一个具有 ArrayDeque 其它所有方法(Java 1.0 设计者在创建 java.util.Stack ,就犯了这个错误)。...在Java5 中添加了 PriorityQueue ,以便自动实现这种行为。 当在 PriorityQueue 上调用 offer() 方法来插入一个对象,该对象会在队列中被排序。...使用接口描述一个理由是它可以使我们创建更通用代码。通过针对接口而非具体实现来编写代码,我们代码可以应用于更多类型对象。...例如,如果我们通过继承一个持有 Pet 对象创建一个 Collection 实现,那么我们必须实现 Collection 所有的方法,即使我们不在 display() 方法中使它们,也必须这样做...最常使用集合用黑色粗线线框表示。 虚线框表示接口,实线框表示普通具体。带有空心箭头虚线表示特定实现了一个接口。实心箭头表示某个可以生成箭头指向对象。

75310

Java设计模式之策略模式

策略模式工作原理在策略模式中,每个具体策略实现了策略接口或继承了抽象策略,并重写了其中方法,以定义具体算法。上下文类维护一个策略对象,并在需要时调用其算法。...创建具体策略(ConcreteStrategy):实现策略接口或继承抽象策略,并具体定义算法。定义上下文类(Context):维护一个策略对象,并提供方法来切换策略执行算法。...使用策略模式:根据具体业务需求,创建具体策略上下文类,并在客户端代码中使用策略模式。5. 案例说明接下来,通过一个简单例子来演示策略模式实现。...缺点:客户端必须知道所有的策略:客户端需要了解所有的具体策略,并且负责选择合适策略,可能增加系统复杂性。增加对象数量:每个具体策略都会增加一个对象,可能导致对象数量增加,影响系统性能。...合理地应用策略模式可以使系统更加灵活、可扩展,并且更易于理解维护。然而,在使用策略模式,需要根据具体业务需求来设计策略接口具体策略,以确保模式正确应用系统稳定性。

47510

Swift 中 Actors 使用以如何及防止数据竞争

数据竞争导致不可预测行为、内存损坏、不稳定测试奇怪崩溃。你可能遇到无法解决崩溃,因为你不知道它们何时发生,如何重现它们,或者如何根据理论来修复它们。...: Int = 0 } Actor 其他 Swift 类型一样,它们也可以有初始化器、方法、属性子标号,同时你也可以协议和泛型来使用它们。...然而,你需要考虑到可能有另一个线程在等待调用chickenStartsEating,这可能导致在我们打印出结果时候有两只吃食鸡。...,因为编译器告诉你: 将不可变属性标记为 nonisolated 是多余 为什么在使用 Actors 仍会出现数据竞争?...当在你代码中持续使用 Actors ,你肯定会降低遇到数据竞争风险。创建同步访问可以防止与数据竞争有关奇怪崩溃。然而,你显然需要持续地使用它们来防止你应用程序中出现数据竞争。

2.5K10

行为设计模式及其在JVM中应用

在上篇文章中我们说到创建者设计模式。 现在我们来看看行为设计模式。 这些模式关注我们对象如何相互交互或者我们如何与它们交互。...我们没有必要调用委托。我们可以决定我们不应该这样做,而是提前终止链。 例如,如果有一些输入参数,我们可以验证它们并在它们无效提前终止。...这通常通过一个代表策略接口来实现。 然后,客户端代码能够根据具体情况需要编写实现此接口具体。...我们将使用模板方法一组一个或多个抽象方法定义一个基——要么未实现,要么以某些默认行为实现。 然后模板方法以固定模式调用这些抽象方法。...我们示例 StandardUser 调用适当方法,在 AdminUser Superuser 中也这样做。

97020

如何对第一个Vue.js组件进行单元测试 (下)

首先,我们使用Jestexpect函数,它将我们想要测试值作为参数。在我们例子中,在父级上findAll方法来获取具有活动所有元素。...在我们例中,用户可以点击stars来切换它们。我们可以在测试中使用触发器方法伪造它,并调度各种事件。        ...在我们代码中,这由一个活动表示,我们仅在它们被激活附加在star上。我们通过调用star上classes方法来测试它,它将名作为字符串数组返回。...我们可以通过设置拆卸功能实现这一目标。这可以帮助我们在运行测试之前初始化,然后进行清理。        在我们例子中,有一种方法可以是在每次测试之前创建我们父级并在之后销毁它。        ...单元测试可确保程序单元行为符合预期。它面向组件消费者- 在软件中使用该组件程序员。功能测试从用户角度确保功能或工作流行为符合预期 。

3.3K00

C# API中模型和它们接口设计

数据模型(Data Model) 据模型包含数据(即属性集合)行为对象或对象图。数据模型是本文重点。...换句话说,数据模型所有方法都应该是可预测,而且这种预测只能基于它们属性值。 在父对象子对象之间传递消息 父对象子对象通常需要交互。如果做得不好,可能导致难以理解紧密交叉耦合。...来自用户界面的问题更多,因为用户通常需要逐个字段得填写表单。 因为存在这些限制,所以不能在构造函数属性设置器中使用异常,就像你在其他中使用异常一样。不过可以验证接口,为错误检查提供一些灵活性。...这可能产生奇怪UI效果,因为HasErrors会在两种状态之间切换。 最后是IEnumerable GetErrors(string propertyName)方法,这个方法用于验证属性。...命令式验证另一个限制是它需要使用共享接口,这样才能让应用程序其余部分通过一致方式触发验证。 空表单问题 当用户在创建新记录并未填写所有必填字段,就会出现空表单问题。

1.6K20

Java设计模式:代理模式静态动态之分(八)

静态代理实现相对简单,但缺点是当需要代理增多时,导致代理数量剧增,增加了系统复杂性。 动态代理:动态代理是在运行时创建代理对象。...增强功能:代理可以通过装饰器模式方式增强真实对象功能,提供额外服务或修改现有行为。 4.2 缺点 性能开销:由于代理增加了额外层级调用,可能导致性能下降。...可能引入错误:如果代理实现不正确或存在缺陷,可能导致意外行为或错误。需要仔细测试验证代理逻辑以确保其按预期工作。 五、代理模式使用场景 Java代理模式在以下场景中应用: 1....当你调用Mapper接口方法,实际上是调用了一个动态生成代理对象,该对象根据方法签名配置信息执行相应SQL操作。 5....当我们在方法上添加@Transactional注解,Spring会为该方法创建一个代理对象,并在代理对象中添加事务管理逻辑。

9910

Java8编程思想(十二)-容器持有对象(下)

在Java5 中添加了 PriorityQueue ,以便自动实现这种行为。 当在 PriorityQueue 上调用 offer() 方法来插入一个对象,该对象会在队列中被排序。...使用接口描述一个理由是它可以使我们创建更通用代码。通过针对接口而非具体实现来编写代码,我们代码可以应用于更多类型对象。...例如,如果我们通过继承一个持有 Pet 对象创建一个 Collection 实现,那么我们必须实现 Collection 所有的方法,即使我们不在 display() 方法中使它们,也必须这样做...但是如果在该对象上调用 reversed() 方法,它会产生不同行为。...最常使用集合用黑色粗线线框表示。 虚线框表示接口,实线框表示普通具体。带有空心箭头虚线表示特定实现了一个接口。实心箭头表示某个可以生成箭头指向对象。

55320

4.6 W 字总结!Java 11—Java 17特性详解

:book 为空而导致 NullPointerException,而对于一些复杂或者嵌套情况下出现 NullPointerException ,仅根据打印出来信息,很难判断实际出现问题位置,具体见下面示例...同时在 CMS 并行标记并行清理,应用线程还在继续运行,程序在运行过程中自然创建新对象、释放不用对象,所以在这个过程中,会有新不可达内存地址产生,而这部分不可达内存是出现在标记过程结束之后,本轮... java.time.LocalDateTime),并在其构造器中添加 forRemoval(自 JDK 9 开始被弃),这样提示新警告。...更好方法是配置每个流过滤器,这样它们就不需要每个流创建参与。计划中增强应帮助开发人员为每个反序列化上下文例构建和应用适当过滤器。...密封接口限制哪些其他接口可以扩展或实现它们

1.4K30

Java开发三大怪

当我们在调用一个get或set访问器,先问问自己:操作这些数据行为究竟该交给调用者,而是交给拥有这些数据对象?...倘若对这一改进不以为然,则可以设想Component发布逻辑存在多个调用,情况怎么样? 为什么在我们业务代码中总会出现Martin Fowler所说“贫血模型”,原因就在于此。...charge()参数,所以它们并非陌生对象;但是,Wallet既非Cashier方法参数,也不是它属性,更不由它创建,因此,Wallet就是Cashier陌生对象。...第二怪 懒实例,静态方法人人爱 静态方法用起来很方便,因为无需实例化即可调用。它致命缺点是不可扩展,调用者与静态方法之间是紧耦合。...它会将当前名当做接口类型名称,然后要求你输入更为具体名。

45620

JavaScript 编程精解 中文第三版 十六、项目:平台游戏

这又是一个持久性数据结构,更新游戏状态创建新状态,并使旧状态保持完整。 角色 角色对象表示,游戏中给定可移动元素的当前位置状态。所有的角色对象都遵循相同接口。...当我们需要将速度向量乘时间间隔,来获得那个时间行走距离,这就有用了。 不同类型角色拥有他们自己,因为他们行为非常不同。让我们定义这些。稍后我们将看看他们update方法。...系统中某些分割点可以通过严格接口对系统进行合理划分,但某些分割点则不是如此。尝试去封装某些本没有合理边界代码必然导致浪费大量精力。...该函数要求我们跟踪上次调用函数时间,并在每一帧后再次调用requestAnimationFrame方法。...当浏览器标签页或窗口隐藏,requestAnimationFrame调用自动暂停,并在标签页或窗口再次显示重新开始绘制动画。在本例中,lastTimetime之差是隐藏页面的整个时间。

1.8K10

重温设计模式 --- 状态模式

引言 状态模式是一种行为型设计模式,它允许对象在其内部状态改变改变其行为。该模式将对象行为与其状态分离,并将每种状态封装在不同中。...这样,对象可以在运行时根据其状态选择不同行为,而不必在代码中使用大量条件语句来处理这些状态。...状态模式优点是它将与特定状态相关行为局部化并且将状态转换显式化,从而简化了代码,并且使得代码更加容易扩展维护。但是,使用状态模式可能增加数量,从而增加代码复杂度。...下面C#写一个示例,用于更好地说明状态模式实现。 假设有一个交通信号灯系统,其中包括红灯、黄灯绿灯三种状态。...一个明显缺点是,如果我们有许多状态,我们需要实现许多具体状态,这可能导致代码变得复杂难以维护。此外,当状态变化不频繁,状态模式可能过于繁琐,并且可能不值得实现。

14220
领券