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

如何protected方法进行单元测试

也许很多同学写单元测试时遇到这样问题,一个方法是 protected ,如何测呢 ? 当然,你可以说把 protected 改成 public 就可测了!...假设我们要对下面这个 add 方法进行测试 class Demo{ protected function add($a, $b){ return...PHPUnit_Framework_TestCase{ public function testAdd(){ $obj = new DemoForTest();//注意这里new专用于测试...其实方法很简单,就是利用了继承继承要做唯一事情是将父 protected 方法以 public 方式暴露给外界,参数等一切形式与父相同。...目的只有一个,方便测试,且不对原有父代码造成影响。 下一个问题: private 方法该怎么测呢?改成 protected 测吧!是不是又被塞到牙了。

3.7K10
您找到你想要的搜索结果了吗?
是的
没有找到

为什么日志要private static final

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

2.1K20

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

): 缺省(default)访问级别, 声明该成员内部任何都可以访问这个成员.保护(protected): 声明该成员子类和内部任何可以访问这个成员.公有的(public).如果覆盖了一个方法...继承机制会把API缺陷传播到子类, 而复合则允许设计新API来隐藏这些缺陷.第19条 要么为继承而设计, 并提供文档说明, 要么就禁止继承对于专门为了继承而设计, 需要具有良好文档.该类文档必须精确地描述覆盖每个方法所带来影响...使子类更易提供针对子列表快速clear方法.对于为了继承而设计, 唯一测试方法就是编写子类.在为了继承而设计有可能被广泛使用时, 必须要意识到, 对于文档中所说明自用模式, 以及对于其保护方法和域中所隐含实现策略...因此必须在发布之前先编写子类对进行测试.为了允许继承, 还必须遵守其他一些约束.构造器决不能调用可被覆盖方法. 无论是直接调用还是间接调用....如果该类有readResolve或writeReplace方法, 就必须使它们成为保护方法.对于那些并非为了安全地进行子类化而设计和编写文档, 要禁止子类化.把声明为final.把所有的构造器都变成私有的

65471

C++和Java中继承比较

因此,Java 总是存在一个单一继承树,而Object 是树根。在 Java ,当创建一个时,它会自动Object 继承。...然而,在 C++ ,有一个森林;当我们创建一个不从另一个继承时,我们在森林中创建了一棵新树。 以下 Java 示例显示 Test 自动继承自 Object 。 ...3) 保护成员访问说明符含义在Java中有些不同。在 Java “A”保护成员可以在同一个其他“B”访问,即使 B 不是 A 继承(它们都必须在同一个)。  ...因此,我们不能改变 Java 成员保护级别,如果某个数据成员在基是公共保护,那么它在派生仍然是公共保护。与 C++ 一样,基私有成员在派生不可访问。 ...与 C++ 不同,在 Java ,我们不必记住那些由基访问说明符和继承说明符组合而成继承规则。  5) 在 Java 方法默认是虚拟。在 C++ ,我们明确使用虚拟关键字。

55610

Java核心技术 继承

和子类: 父也叫 private属性并不能被子类访问。假如我们编写一个Manager继承Employee。...(); return baseSalary + bonus; } 有些人认为,super与this引用是类似的概念,实际上super并不是一个对象引用,不能将super赋给另一个对象变量,它只是一个指示编译器调用方法特殊关键字...特定方法也可以被声明为final,这样子类就不能覆盖这个方法,final所有方法都自动称为final方法。...保护访问: 当我们把某个方法或者域可访问标识设置为proteced时,表明这个保护,也就是说同个以及其子类都能够访问。...equals方法: Objectequals方法用于检测一个对象是否等于另一个对象。在Object,这个方法将判断两个对象是否具有相同引用。然而,对大多数来说,这种判断并没有什么意义。

50820

Python 面向对象 OOP-三大特性#学习猿地

特征:公有的成员可以在任何位置进行访问和操作 保护封装 定义:在成员名称前面加一个下划线 _成员名称 特征:保护成员和公有成员一样可以在任何位置进行访问,但是一般不要随便访问和操作保护成员 私有的封装...在python并没有实现保护封装,属于开发者约定俗成。 2. python私有化封装是通过改名策略实现,并不是真正私有化 ## 继承 ### 什么是继承?...### 计算机继承 > 在面向对象,一个继承,那么这个就拥有了父所有成员(除了私有成员) ### 概念: + 被其它继承,这个称为 父 也叫做 基 或者 + 继承其它...+ 子类如果定义了父不存在方法,称为对父扩展 + 一个父可以被多个子类继承,还可以存在 链式继承 。...# super()方法在调用时,会自动把当前self传入到上一级方法 ``` #### 关系检测 issubclass() > issubclass() 检测一个是否时另一个子类 ```

35720

Python 面向对象 OOP-三大特性#学习猿地

特征:公有的成员可以在任何位置进行访问和操作 保护封装 定义:在成员名称前面加一个下划线 _成员名称 特征:保护成员和公有成员一样可以在任何位置进行访问,但是一般不要随便访问和操作保护成员 私有的封装...在python并没有实现保护封装,属于开发者约定俗成。 2. python私有化封装是通过改名策略实现,并不是真正私有化 ## 继承 ### 什么是继承?...### 计算机继承 > 在面向对象,一个继承,那么这个就拥有了父所有成员(除了私有成员) ### 概念: + 被其它继承,这个称为 父 也叫做 基 或者 + 继承其它...+ 子类如果定义了父不存在方法,称为对父扩展 + 一个父可以被多个子类继承,还可以存在 链式继承 。  ...# super()方法在调用时,会自动把当前self传入到上一级方法 ``` #### 关系检测 issubclass() > issubclass() 检测一个是否时另一个子类 ```

34910

Effective Java(二)

在这类情况之下,Object继承得到 equals 实现已经足够了。 已经覆盖了 equals,行为对于这个也是适合。...是私有的,或者是级私有的,可以确定它 equals 方法永远不会被调用。...它主要缺陷在于缺少一个 clone 方法,而 Object clone 方法保护。...它决定了Object保护clone方法实现行为:如果一个实现了Cloneable,Objectclone方法就返回该对象逐域拷贝,否则就会抛出CloneNotSupportedException...这是接口一种极端非典型用法,也不值得仿效。通常情况下,实现接口是为了表明可以为它客户做些什么。然而,对于Cloneab1e接口,它改变了保护方法行为。

44020

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

protected——成员可以被声明子类访问(一些限制,JLS,6.6.2),以及它声明任何。 public——该成员可以任何地方被访问。...保护(protected)成员是导出API一部分,并且必须永远支持。 此外,导出保护成员表示对实现细节公开承诺(条目 19)。 对保护成员需求应该相对较少。...有一个关键规则限制了你减少方法访问性能力。 如果一个方法重写一个方法,那么它在子类访问级别就不能低于父访问级别[JLS,8.4.8.3]。...在未导出,公共和保护公共成员会产生两个隐式访问级别,这是普通公共和保护级别的内部类似的情况。这种共享需求是相对少见,并且可以通过重新安排来消除。...如果将模块JAR文件放在应用程序路径而不是其模块路径,那么模块将恢复为非模块化行为:公共所有公共保护成员都具有其普通可访问性,不管是否由模块导出[Reinhold,1.2

91240

Java 中文官方教程 2022 版(四)

您可以在这里阅读更多关于接口信息——它们作用是什么,为什么您可能想要编写一个,以及如何编写一个。 继承 这一部分描述了如何从一个派生另一个。也就是说,子类如何继承字段和方法。...您将了解到所有都是Object派生,以及如何修改子类继承方法。本节还涵盖类似接口抽象。...私有成员 子类不继承其父private成员。但是,如果有用于访问其私有字段公共或保护方法,子类也可以使用这些方法。 嵌套可以访问其封闭所有私有成员—包括字段和方法。...因此,一个由子类继承公共或保护嵌套间接访问了所有私有成员。 对象转型 我们已经看到,一个对象数据类型是它实例化数据类型。...修饰符 覆盖方法访问修饰符可以允许更多访问权限,但不能少于被覆盖方法访问权限。例如,保护实例方法可以在子类变为公共方法,但不能变为私有方法

3400

【说站】java继承优缺点分析

耦合:关系。 内聚:自己完成某件事能力。 打破了封装性。 3、继承成员 继承机制引入了保护成员,提供了一个新成员访问控制级别,可以理解为公共和私有。...在继承,子类继承了超级结构函数以外所有成员,这些成员成为子类继承成员。继承人不仅包括超级定义共有、保护和私有成员,还包括超级继承人。...在子类,子类可以访问自己定义所有成员,也可以访问父亲共有和保护继承成员,但不能访问超级私有继承成员。 继承者在子类访问控制与其在访问控制相同。...以及最初在是共有成员,被子类继承后被视为共有成员;最初在保护成员,被子类继承后仍然是保护成员;最初在是私有成员,被子类继承后被视为私有成员,但子类无法访问。...资料类型为子类对象无法访问子类及其父保护成员。 以上就是java继承优缺点分析,希望对大家有所帮助。

43220

Java初学者需掌握30个概念

2.OOP中最重要思想是是模板是蓝图,构造一个对象,即创建了这个一个实例(instance)。      ...4.通过扩展一个来获得一个新继承(inheritance),而所有的都是由Object根扩展而得,根下文会做介绍。      ...10.继承思想:允许在已经存在基础上构建新,当你继承一个已经存在时,那么你就复用了这个方法和字段,同时你可以在新添加新方法和字段。      ...18.objectequal和toString方法。       equal用于测试一个对象是否同另一个对象相等。      ...object一个保护方法,这意味着你代码不能简单调用它。

576100

Java复习3-继承

编译器会一一列举所有C名为f方法和其访问属性为public且名为f方法(私有方法不可访问)。 至此,编译器已获得所有可能被调用候选方法。...我们将方法声明为final主要目的是:确保他们不会在子类改变语义。 强制转换 只能在继承层次内进行类型转换。 在将转换成子类之前,应该使用instanceof进行检查。...保护访问 仅本类可见--private 所有可见--public 对本和所有子类可见--protected 对本可见--默认,不需要修饰符 equals方法 java.util.Objects#...ClassgetDeclareFields、getDeclareMethods和getDeclareConstructors方法将分别返回声明全部字段、方法和构造器,其中包括私有和保护成员...将公共操作和字段放在 不要使用保护字段,非必须要,不要使用protected,而推荐用private 使用继承实现is-a关系,不是这样关系不应该使用继承 除非所有继承方法都有意义,否则不要使用继承

60420

Java面试-面向对象

在Java,运行时多态性或动态方法分派是一个在运行时而不是在编译时解决对覆盖方法调用过程。在此过程,将通过引用变量调用重写方法。让我们看下面的示例,以更好地理解它。...接口所有方法都是抽象 抽象可以具有实例变量 接口不能有实例变量 抽象可以具有任何可见性:公共,私有,保护 接口可见性必须是公共(或无) 如果我们向抽象添加新方法,则可以选择提供默认实现,...Java支持四种继承类型: 单继承:在单继承,一个继承另一个属性,即将只有一个父和一个子类。...您可以覆盖Java私有或静态方法吗? 您不能在Java覆盖私有或静态方法。如果您在子类创建具有相同返回类型和相同方法参数类似方法,则它将隐藏方法;否则,它将隐藏方法。这称为方法隐藏。...您必须注意一件事是Object clone()是一种保护方法,因此您需要重写它。 Q17。Java构造函数是什么? 复制构造函数是一个成员函数,用于使用同一另一个对象初始化一个对象。

69220

Java面向对象编程三大特征 - 继承

下面我们将例子与面向对象概念进行对应: 上述关系可以用子类别继承自父类别来描述 父类别被称作父 子类别被称作子类 继承可以使子类具有父各种属性和方法,不需要再次编写相同代码 2....Father实体所在:edu.sandtower.bean Son实体为Father子类,与Father在同一下 Test测试所在:edu.sandtower.test package...// 父保护属性 protected double money = 5000; // 父公开属性 public String name = "老李"; } package...测试对于子父来说是一个处在不同完全无关,在调用时会被权限修饰符所限制,所以这里也再度明确一下:权限修饰符是根据所在路径与之间结构关系进行限定,不是说在任意一个地方使用子类实例都能调用出父属性和方法...= 2000;// 私房钱 // 父保护属性 protected double money = 5000; // 父公开属性 public String

56031

php第四篇(继承)1

,也称之为基,也称之为。 子类也称之为派生。 那同学们,什么叫做扩展? 记住了,兄弟们,在原本继承基础上,扩展自己(子类)内容,这就叫扩展....,为什么,这样说,因为继承是不是必须必须啊,是吧,扩展是子类定义内容,可写就扩展嘛是吧. 先问一个问题? 父保护成员,子类可不可以被继承? 代码演示吧: 子类不能继承保护方法,那怎么办? 重点强调一下:子类内部继承保护成员。用实例化对象访问不到父保护成员。 怎么办?子类怎么调用父保护方法呢? 代码演示把: 在子类内部定义把… 问题来了?private访问怎么玩呢? <?php class people { private function eat() { echo "吃饭啦....

20920

知识点总结:Java核心技术(卷1)

方法; 默认,不需要修饰符 对本可见; 加载: 在启动时,包含main方法被加载。...因为super并不是一个对象引用,不能讲super赋给另一个对象变量,它只是一个指示编译器调用方法特殊关键字。...并应该将equal方法声明为final; 完美的equals方法建议: 1、显示参数命名为otherObject,稍后需要将它转换成另一个叫other变量; 2、检测this域otherObject...ordinal() 这个方法返回enum声明枚举常量位置,位置0开始计数。...使用 第一 将队列当做线程管理工具来使用,put和take方法 第二 当试图向满队列添加或队列移出元素时,add、remove和element操作会抛出异常 第三

32430

RefactoringGuru 代码异味和重构技巧总结

除此之外,它们是空。 被拒绝继承 如果子类只使用其父继承一些方法和属性,那么层次结构就不正常。不需要方法可能只是不使用,或者被重新定义并发出异常。...解决方案:在使用该方法最多创建一个新方法,然后将代码方法移动到这里。将旧方法代码转换为对另一个中新方法引用,或者将其完全删除。...隐藏方法 问题:一个方法不被其他使用,或者只在它自己层次结构中使用。 解决方案:将方法设置为私有或保护。...用委托替换继承 问题:有一个子类只使用其一部分方法(或者不可能继承数据)。 解决方案:创建一个字段并在其中放置一个对象,将方法委托给对象,并摆脱继承。...用继承替换委托 问题:一个包含许多简单方法,这些方法将委托给另一个所有方法。 解决方案:使该类继承另一个,这样就不需要委托方法

1.8K40
领券