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

当模拟包私有抽象超类中的公共方法时,为什么实际的逻辑在运行?

当模拟包私有抽象超类中的公共方法时,实际的逻辑在运行是因为模拟对象的行为是基于实际对象的行为进行模拟的。

在面向对象编程中,抽象类是一种不能被实例化的类,它定义了一组抽象方法和非抽象方法,供子类继承和实现。包私有抽象超类是指在包内部可见的抽象超类。

当我们使用模拟对象进行单元测试时,我们可以使用模拟框架来模拟对象的行为。模拟框架可以创建一个模拟对象,该对象具有与实际对象相同的接口和行为。我们可以通过模拟对象来调用公共方法,并期望它们执行特定的逻辑。

然而,当模拟包私有抽象超类中的公共方法时,实际的逻辑仍然会运行。这是因为模拟框架只能模拟对象的行为,而无法模拟对象的实现细节。包私有抽象超类的公共方法在实际对象中具有具体的实现,模拟框架无法改变这个实现。因此,当我们调用模拟对象的公共方法时,实际的逻辑仍然会被执行。

总结起来,当模拟包私有抽象超类中的公共方法时,实际的逻辑在运行是因为模拟框架只能模拟对象的行为,而无法改变对象的实现细节。

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

相关·内容

为什么日志要private static final

为什么java.util...Logger甚至不提供接受Class对象方法呢?为什么开发java.util.logging的人将他们API建立Log4j上,却忽略了其中一些最有用部分?...以这种方式声明日志记录器最大问题是,您现在从获得所有日志记录与子类日志记录混合在一起,并且日志输出,除非您查看源代码,否则无法识别哪些消息来自哪个。...如果有很多您不想看到日志记录,这是非常烦人,因为您不能过滤掉它。 另一个问题是,您以不同方式设置日志级别的能力消失了,例如,如果子类驻留在与不同。...在这种情况下,如果试图从筛选出日志记录,则不能,因为实际运行用于获取日志记录器。 最后,拥有一个受保护记录器似乎违反了基本面向对象原则。...为什么子类应该从横切关注点了解内部实现细节?无论如何,虽然这是一个愚蠢小咆哮,但是您扩展一个声明像这样受保护日志记录器,它确实很烦人。

2.1K20

Java 语言基础 (和对象, 方法和封装, static 关键字和继承, 多态和特殊)

this 前缀 不同对象调用同一个方法, 调用对象不同导致 this 不同, 从而 this 访问结果也不同 使用方式 构造方法第一行可以使用 this() 方法, 调用本类其他构造方法...对于父子类都有的非静态方法来说 编译阶段调用父版本 运行阶段调用子类重写版本 (动态绑定) 对于父子类都有的静态方法来说 编译和运行阶段都调用父版本 多态实际意义 屏蔽不同子类差异性实现通用编程带来不同效果...实际意义: 不在于创建对象而在于被继承 抽象抽象方法关系 抽象可以有成员变量, 构造方法, 成员方法 抽象可以没有抽象方法, 也可以有抽象方法 拥有抽象方法必须是抽象 真正意义上抽象...(Java 7) 接口新增支持默认方法和静态方法 (Java 8 新特性) 接口新增支持私有方法 (Java 9 新特性) 抽象增加方法子类可以不用重写, 接口增加方法实现需要重写 (Java...元注解 @Inherited -- 子类继承注解 注解本身不可以继承 如果一个被该注解标记过注解进行注解, 并且子类没有任何注解应用时, 则子类就继承注解 元注解 @Repeatable

81730
  • Java内功心法,深入解析面向对象

    Java垃圾收集器自动扫描对象动态内存区,把没有引用对象作为垃圾收集起来并释放。系统内存用尽或调用System.gc()要求垃圾回收,垃圾回收程与系统同步运行。...封装原则:将不需要对外提供内容都隐藏(设置访问修饰符为“private”)起来。把属性都隐藏,仅提供公共方法对其访问,可以访问方式中加入逻辑判断等语句。...可扩充性:增加新子类不影响已经存在结构. 接口性:多态是通过方法签名,向子类提供一个公共接口,由子类来完善或者重写它来实现....抽象意义 抽象意义可以用三句话来概括: 为其他子类提供一个公共类型 封装子类重复定义内容 定义抽象方法,子类虽然有不同实现,但是定义是一致 抽象和接口有什么区别 抽象和接口都不能够实例化...默认对于同一个其他相当于公开(public),对于不是同一个其他相当于私有(private)。受保护(protected)对子类相当于公开,对不是同一没有父子关系相当于私有

    57530

    Java基础教程(8)-Java面向对象和(二)

    封装是面向对象特征之一,是对象和概念主要特性。简单说,一个就是一个封装了数据以及操作这些数据代码逻辑实体。一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。...Java也定义了一个默认访问级别default;一个成员被public指示符修饰,该成员可以被你程序任何其他代码访问。...一个成员被指定为private,该成员只能被它其他成员访问。...这意味着,虽然针对不同对象具体操作不同,但通过一个公共,它们(那些操作)可以通过相同方式予以调用;最常见多态就是将子类传入父参数运行时调用父方法通过传入子类决定具体内部结构或行为...2、重载遵循所谓“编译期绑定”,即在编译根据参数变量类型判断应该调用哪个方法。3、重写遵循所谓“运行期绑定”,即在运行时候,根据引用变量所指向实际对象类型来调用方法

    9510

    【测试左移专栏】用 Powermock 和 Mockito 来做安卓单元测试

    程序单元是应用最小可测试部件。在过程化编程,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基)、抽象、或者派生(子类)方法。...10)Answer接口使用; (11)如何使用spy进行部分模拟; (12)如何测试或模拟私有方法; (13)@Before和@Test作用; (14)如何给私有的字段赋值; (15)如何模拟异常。...整理了一个case单测流程图,供参考: 5、公共可复用抽离出成工具 将一些常用场景抽象出工具mock,如BundleMock、HandlerMock、IntentMock、MainThreadHandler...7、单测编写经验 (1)mock对象可以被整个测试方法共用,mock统一放到@Before里init; (2)mock对象仅供单个单测用例使用,mock可以直接放到单测用例里; (3)能抽象出来...单测过程可能会出现某些覆盖率结果为0,但实际上应该有覆盖率,这可能是由于一些页面单测场景下被测@PrepareForTest声明了,导致这些覆盖率为0。

    4.1K00

    Java内功心法,深入解析面向对象

    Java垃圾收集器自动扫描对象动态内存区,把没有引用对象作为垃圾收集起来并释放。系统内存用尽或调用System.gc()要求垃圾回收,垃圾回收程与系统同步运行。...封装原则:将不需要对外提供内容都隐藏(设置访问修饰符为“private”)起来。把属性都隐藏,仅提供公共方法对其访问,可以访问方式中加入逻辑判断等语句。...可扩充性:增加新子类不影响已经存在结构. 接口性:多态是通过方法签名,向子类提供一个公共接口,由子类来完善或者重写它来实现....抽象意义 抽象意义可以用三句话来概括: 为其他子类提供一个公共类型 封装子类重复定义内容 定义抽象方法,子类虽然有不同实现,但是定义是一致 抽象和接口有什么区别 抽象和接口都不能够实例化...默认对于同一个其他相当于公开(public),对于不是同一个其他相当于私有(private)。受保护(protected)对子类相当于公开,对不是同一没有父子关系相当于私有

    50700

    JAVA入门学习四

    c:实例化格式: 外部类名.内部类名 对象名 = 外部类对象.内部类对象; (注意有两个new 关键字) 成员私有内部类: a:其他无法直接访问外部类私有成员内部类, 需要访问内部类上级(外部)公共方法进行调用...; } } //本类公共方法 public void print(){ System.out.println("私有内部类: 外部类公共方法 - 调用私有的内部类里面的方法...内部类可以访问外部类私有成员number:1024 私有内部类: 外部类公共方法 - 调用私有的内部类里面的方法 私有内部类公共方法 外部类是无法访问,除非为本类公共方法调用 静态内部类:...final使之成为常量):1024 为什么局部内部类访问他所在方法局部变量必须用final修饰?...修饰会在加载时候进入常量池,即使方法弹栈,常量池常量还在也可以继续使用; jdk1.8不加final也能使用,实际上没有手动添加系统底层也会默给你final; 注意事项: 用画图表示:栈(stack

    44910

    JAVA入门学习四

    c:实例化格式: 外部类名.内部类名 对象名 = 外部类对象.内部类对象; (注意有两个new 关键字) 成员私有内部类: a:其他无法直接访问外部类私有成员内部类, 需要访问内部类上级(外部)公共方法进行调用...; } } //本类公共方法 public void print(){ System.out.println("私有内部类: 外部类公共方法 - 调用私有的内部类里面的方法...内部类可以访问外部类私有成员number:1024 私有内部类: 外部类公共方法 - 调用私有的内部类里面的方法 私有内部类公共方法 外部类是无法访问,除非为本类公共方法调用 静态内部类:...final使之成为常量):1024 为什么局部内部类访问他所在方法局部变量必须用final修饰?...修饰会在加载时候进入常量池,即使方法弹栈,常量池常量还在也可以继续使用; jdk1.8不加final也能使用,实际上没有手动添加系统底层也会默给你final; 注意事项: 用画图表示:栈(stack

    58830

    Java面试-面向对象

    Java运行时多态性或动态方法分派是一个在运行时而不是在编译解决对覆盖方法调用过程。在此过程,将通过引用变量调用重写方法。让我们看下面的示例,以更好地理解它。...Java接口是蓝图,或者可以说它是抽象方法和静态常量集合。接口中,每个方法都是公共抽象,但不包含任何构造函数。因此,接口基本上是一组带有空主体相关方法。...接口所有方法都是抽象 抽象可以具有实例变量 接口不能有实例变量 抽象可以具有任何可见性:公共私有,受保护 接口可见性必须是公共(或无) 如果我们向抽象添加新方法,则可以选择提供默认实现,...您可以覆盖Java私有或静态方法吗? 您不能在Java覆盖私有或静态方法。如果您在子类创建具有相同返回类型和相同方法参数类似方法,则它将隐藏方法;否则,它将隐藏方法。这称为方法隐藏。...同样,您不能覆盖子类私有方法,因为在那里无法访问它。您可以做子类创建另一个具有相同名称私有方法。让我们看下面的示例,以更好地理解它。

    71120

    5.1 和子类

    通过扩展定义子类时候,仅需要指出子类和不同之处,因此,会将通用方法放在,而将具有特殊用途方法放在子类,这种将通用功能放在方法面向对象程序设计十分普遍。   ...有些方法子类Manager不一定适用,比如说ManagergetSalary方法应该返回薪水和奖金总和,为此需要提供一个新方法来覆盖(override)这个方法。...如果Manager方法一定要访问私有域,就必须借助公共接口,Employee公有方法getSalary就是这个公共接口。...例如可能存在方法f(int)和f(Stirng),编译器会一一列举所有C名为f方法和其访问属性为private且名为f方法私有方法不可访问)。...与此对应是,调用方法依赖于隐式参数实际类型,并且在运行时实现动态绑定。 (4)程序运行而且采用动态绑定调用方法时候,虚拟机一定调用与x所引用对象实际类型最合适那个方法

    1.1K90

    Java 世界法外狂徒:反射

    Java 需要用到反射主要原因包括以下几点: 运行时动态加载,创建:Java是在编译加载,但有时希望在运行时根据某些条件来动态加载和创建所需要。...我们假设在编译并不知道具体名和方法名,但在运行时需要根据动态情况来加载、创建对象并调用方法。...通过反射,可以在运行时创建对象模拟实例,并在测试替换原始对象,以便控制和验证测试行为 Class 对象 Class 对象是反射第一步,我们先从 Class 对象聊起,因为反射中,只要你想在运行时使用类型信息... invoke() 方法,我们可以调用实际对象方法之前和之后执行一些额外逻辑。...动态代理实际开发中常用于 AOP(面向切面编程)等场景,可以方法调用前后添加额外逻辑,如日志记录、事务管理等。 违反访问权限 Java ,通过反射机制可以突破对私有成员访问限制。

    25730

    Effective-java-读书笔记之类和接口

    (或接口)只是某一个内部被用到, 就应该考虑使它成为那个私有嵌套.对于成员(域, 方法, 嵌套和嵌套接口), 有四种可能访问级别(可访问性递增):私有的(private).私有的(package-private...): 增加一个私有域, 它引用现有一个实例.新方法可以转发被包含现有实例方法....(因为构造器子类构造器之前运行, 如果子类覆盖版本方法依赖于子类构造器所执行任何初始化工作, 该方法将不会如预期般地执行.)在为了继承而设计时候, Cloneable和Serializable..., 或者私有的, 并增加一些公有的静态工厂来替代构造器.第20条 接口优于抽象抽象和接口区别:抽象允许包含某些方法实现, 接口则不允许....可以出现在代码任何允许存在表达式地方.且仅匿名出现在非静态环境, 它才有外围实例. 但是即使它们出现在静态环境, 也不可能拥有任何静态成员.常见用法: 创建函数对象.

    70371

    消除JAVA编程坏味道

    或者正常访问锁定域中,或者放到并发集合 多个线程共享可变数据,每个读或者写线程都必须执行同步,否则就会造成活性失败和安全性失败 避免过度同步 为了避免活性失败和安全性失败,一个被同步方法或者代码块...为了允许继承,构造器决不能调用可被覆盖方法,无论是直接调用还是间接调用.否则很可能导致程序失败.构造器子类构造器之前运行....模拟多重继承:实现接口把对于接口方法调用转发到一个内部私有实例上,这个扩展了骨架实现. 接口一旦被公开发行并被广泛实现,在想改变几乎是不可能,而抽象演变比接口容易得多....枚举构造器不可以访问枚举静态域,除了编译静态域,因为枚举也是静态常量初始化时候,静态域并没有初始化;ex:初始化顺序,父静态域>子类静态域>父非静态公共域>子类非静态公共域>父构造器>子类构造器...如果运行时必须依赖其他多个版本,那么反射可能就非常有用 如果有可能就应该仅仅使用反射机制来实例化对象,而访问对象方法使用编译已知某个接口或者 谨慎使用本地方法 1JNI,用本地方法来提高性能做法不值得提倡

    88521

    JAVA入门学习十三

    JDKJRE里lib目录下rt.jar文件; Extension ClassLoader 扩展加载器: 负责JRE扩展目录jar加载,JDKJRElib目录下ext目录;...System ClassLoader 系统加载器: 负责JVM启动时候加载来自Java命令class文件,以及classpath环境变量所指定jar路径; 3.反射 描述:Java反射机制是运行状态对任意一个...,而解剖使用就是Class方法,所以要先获取每个字节码文件对应class类型对象; 总结:反射Reflect一切都是赤裸裸,包括私有的成员变量; Class方法: //实例代表一个运行...Method[] getMethods() //返回一个数组包含 方法物体反射所有的或接口 对象表示公共方法,包括那些由或接口接口继承声明。...一个价值 true表明反射对象应当压制java语言访问检查可以将私有成员变量变成共有; //一个方法提供有关信息和访问,或接口一个方法 public final class Method extends

    55320

    JAVA入门学习十三

    JDKJRE里lib目录下rt.jar文件; Extension ClassLoader 扩展加载器: 负责JRE扩展目录jar加载,JDKJRElib目录下ext目录;...System ClassLoader 系统加载器: 负责JVM启动时候加载来自Java命令class文件,以及classpath环境变量所指定jar路径; 3.反射 描述:Java反射机制是运行状态对任意一个...,而解剖使用就是Class方法,所以要先获取每个字节码文件对应class类型对象; 总结:反射Reflect一切都是赤裸裸,包括私有的成员变量; Class方法: //实例代表一个运行...Method[] getMethods() //返回一个数组包含 方法物体反射所有的或接口 对象表示公共方法,包括那些由或接口接口继承声明。...一个价值 true表明反射对象应当压制java语言访问检查可以将私有成员变量变成共有; //一个方法提供有关信息和访问,或接口一个方法 public final class Method extends

    40910

    如何给6岁小朋友讲解面向对象编程

    每个对象中保持其状态私有时,就可以实现封装。其他对象不能直接访问此状态。相反,它们只能调用一个公共函数列表——称为方法。...它还有一个私有方法meow()。它可以随时调用它,其他不能告诉猫何时喵喵叫。 它们可以公共方法sleep()、play()和feed()定义。...它们每一个都以某种方式修改内部状态,并可能调用meow()。因此,私有状态和公共方法之间建立了绑定。 这是封装。 抽象 抽象可以看作是封装自然扩展。 面向对象设计,程序通常非常大。...可以把它看作是一组公共方法,任何其他都可以调用这些方法,而不需要“知道”它们是如何工作。 另一个现实生活抽象例子? 想想你是如何使用手机: ? 手机很复杂。...但是你知道OOP设计另一个常见问题是什么吗? 对象通常非常相似。它们有共同逻辑。但它们并不完全相同。 那么,我们如何重用公共逻辑并将惟一逻辑提取到一个单独呢?

    99210

    深入PHP面向对象、模式与实践(二)

    ,然后客户端代码需要一个父对象而不是一个子类对象,从而使客户端代码可以不用关心它实际得到是哪个具体实现 2.从客户端代码角度看,方法参数为抽象或能用类型通常都是不错主意。...“工厂”(factory)就是负责生成对象方法 B.单例模式 1.对象应该可以被系统任何对象使用 2.对象不应该被储存在会被覆写全局变量 3.系统不应超过一个对象 4.定义一个私有的构造方法外部不可实例化...C.工厂方法模式 1.代码运行时我们才知道要生成对象类型 2.需要能够相对轻松地加入一些新产品类型 3.每一个产品类型都可定制特定功能 D.抽象工厂模式 1.将系统与实现细节分离开来 2.对系统功能相关元素强制进行组合...1.为了使项目更爱具灵活性,我们需要将按一定结构组织起来,以便它们对象代码运行时能被构建为有用结构。...@var 定义属性类型 2.设置-pp on可显示私有属性 H.方法文档 1.@param 参数名称 类型 简述 2.@return 返回值类型 简要描述 I.文档创建链接 1.

    1.1K20

    Java基础题

    3、接口只能做方法申明,抽象可以做方法申明,也可以做方法实现 4、接口里定义变量只能是公共静态常量,抽象变量是普通变量。...7、抽象里可以没有抽象方法 8、如果一个里有抽象方法,那么这个只能是抽象 9、抽象方法要被实现,所以不能是静态,也不能是私有的。 10、接口可继承接口,并可多继承接口,但只能单根继承。...被其修饰、属性以及方法不仅可以跨访问,而且允许跨(package)访问。 private: Java语言中对访问权限限制最窄修饰符,一般称之为“私有的”。...被其修饰、属性以及方法只能被本身方法及子类访问,即使子类不同也可以访问。 default:即不加任何访问修饰符,通常称为“默认访问模式“。该模式下,只允许同一个中进行访问。...数组和链表区别: 1、从逻辑结构角度来看:数组必须事先定义固定长度(元素个数),不能适应数据动态地增减情况。数据增加,可能超出原先定义元素个数;数据减少时,造成内存浪费。

    1K10

    -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象 接口 区别 多态

    多个可以称为子类,单独这个称为父或者。 子类可以直接访问父私有的属性和行为。 通过extends 关键字让之间产生继承关系。   ...super代表父内存空间标识。 子父出现同名成员,可以用super进行区分 子类要调用父构造函数,可以使用super语句。...方法覆盖 override 子类中出现与父一模一样方法,会出现覆盖操作,也称为重写或者复写。 父私有方法不可以被覆盖。...覆盖应用:   •子类需要父功能,而功能主体子类有自己特有内容,可以复写父方法,   这样,即沿袭了父功能,又定义了子类特有的内容。...没有空参数构造函数,子类构造函数必须通过this或者super语句指定要访问构造函数。 final关键字 final可以修饰方法,变量。 final修饰不可以被继承。

    68910

    Effective Java(第三版)——条目十五:使和成员可访问性最小化

    仔细设计你公共API之后,你反应应该是让所有其他成员设计为私有的。 只有当同一个其他真的需要访问成员,需要删除私有修饰符,从而使成员包成为私有的。...但是,如果类实现Serializable接口(条目 86和87),则这些属性可以“泄漏(leak)”到导出API。 对于公共成员,访问级别从私有到受保护级,可访问性会大大增加。...有一个关键规则限制了你减少方法访问性能力。 如果一个方法重写一个方法,那么它在子类访问级别就不能低于父访问级别[JLS,8.4.8.3]。...幸运是,这不是必须,因为测试可以作为被测试一部分运行,从而获得对私有元素访问。 公共实例属性很少公开(条目 16)。...未导出公共和受保护公共成员会产生两个隐式访问级别,这是普通公共和受保护级别的内部类似的情况。这种共享需求是相对少见,并且可以通过重新安排来消除。

    94440
    领券