`
shuidexiongdi
  • 浏览: 73438 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

继承、覆盖是你期望的执行结果吗

阅读更多
下面例子摘自《深入JAVA虚拟机第二版》第19章,P354
PS:本文不做结果解释,原因请参考作者的解释。只描述结果
package com.shuidexiongdi.thread;

public class SuperTest {
	public static void main(String[] args) {
		new Sub().exampleMethod();
	}
}

class Super {
	private void interestingMethod() {
		System.out.println("Super's interestingMethod");
	}
	
	void exampleMethod() {
		interestingMethod();
	}
}

class Sub extends Super {
	void interestingMethod() {
		System.out.println("Sub's interestingMethod");
	}
}

上面代码运行结果是?你的认为是?好吧,自己动手验证一下。
结果如下:
Super's interestingMethod

如果验证和自己想法一致的,恭喜你,你的基础还不错。我们接着对例子进行修改。

我们对上面例子中的Sub类进行修改
class Sub extends Super {
	void interestingMethod() {
		System.out.println("Sub's interestingMethod");
	}
	void exampleMethod() {
		interestingMethod();
	}
}

好了,上面的运行结果呢?和没修改前一致?还是动手试试吧。
运行结果如下:
Sub's interestingMethod

原因请参考作者原著的解释了,这里只是想提醒一下,继承在没有覆盖父类方法的情况下,定义一个与父类方法相同签名的私有方法(而这种情况我们会有意无意的发生着),请校验和期望的一不一致。不要简单的认为父类的方法纯碎就是拷贝到子类类体下。
分享到:
评论

相关推荐

    Python学习资料之继承

    在上面的代码中,即使`call_parent_method`期望的是`ParentClass`类型的参数,我们依然可以传入`ChildClass`的实例,因为`ChildClass`继承了`ParentClass`并实现了`parent_method`。 最后,Python的继承机制也支持...

    C#程序设计实验7-类继承-虚拟和重写.docx

    对于类D的对象,期望的运行结果是"16",因为初始值6加10等于16。对于类E的对象,预期结果是"56",因为初始值6加50等于50。程序通过比较实际输出和预期结果来验证多态性是否正确工作。 实验的难点在于理解和应用继承...

    软件测试用例编写教程

    测试用例定义了为执行测试所需要的条件或环境、输入或操作步骤,以及所期望的结果。测试环境是测试的基础。除正常的输入值外,关键是需要寻找那些是属于边界条件的输入值和正常输入值。期望结果或标准是根据系统设计...

    用 PHPUnit 测试你的应用程序

    PHPUnit 提供了丰富的断言方法,如 `assertEquals`、`assertTrue` 和 `assertNull` 等,用于检查代码执行后的结果是否符合预期。此外,还有一些测试助手,如 `createMock` 用于创建对象的模拟对象,`setUp` 和 `...

    用MockStrutsTestCase测试action测试类

    之后,你可以继承MockStrutsTestCase作为你的测试类基础。 2. **测试环境准备**:MockStrutsTestCase会自动配置一个模拟的Servlet环境,包括ActionServlet、RequestProcessor和ActionMapping等。你需要在测试类中...

    软件测试样题

    * **知识点解析**:测试用例是对特定测试场景的一种详细描述,它包括了一系列预先定义的输入、操作步骤和期望结果,用于验证某个特定的功能是否按预期工作。一个完整的测试用例通常包含以下几个部分: - **标题**...

    艺龙最新秋招Java笔试题.docx

    7. Java 继承与方法重写:子类可以覆盖父类的方法,`D. public A foo(B b){return b;}`是正确的,因为它没有直接覆盖父类方法,而是创建了一个新的重载方法。 8. 函数的时间复杂度:题目中的函数`recursive()`是一...

    python单元测试unittest实例详解-电脑资料.pdf

    如果有一个测试失败,unittest会提供失败的详细信息,包括失败的测试方法名称和实际与期望结果的差异。 单元测试对于软件质量控制至关重要,因为它可以确保代码修改不会引入新的错误,并且在回归测试时能快速定位...

    专升本《软件工程》考试答案.docx

    11. 测试用例应包括输入数据和预期的输出结果,以便比较实际结果与期望结果,检查软件的正确性。 12. 软件总体设计结束时,会得到优化后的软件结构图,这是后续详细设计和编码的基础。 13. 结构化程序设计中,逐步...

    自动化测试用例设计平台产品介绍.pptx

    在测试领域,客户期望缩短测试周期,确保测试用例全面,同时能够快速响应各种正常和异常激励。传统的测试分析和设计过程往往不系统、不透明,缺乏科学的覆盖手段。测试人员需要耗费大量时间手动编写测试用例,效率...

    C++继承介绍

    在上述代码中,并没有显式声明虚函数,但如果`base`类的`getBaseName`和`getBaseData`函数是虚函数,那么即使通过`base`类指针调用,也会执行`derived`类覆盖的版本。 **纯虚函数(Pure Virtual Functions)**是...

    软件质量保证与测试课件

    《软件质量保证与测试》是一门深入探讨软件开发过程中质量管理和测试策略的课程。课程涵盖了软件质量的基础概念、软件质量...无论你是软件开发人员、测试工程师还是项目管理者,这些知识都将为你的职业生涯增添价值。

    python3+selenium3单元测试框架(unittest)使用介绍

    runTest()方法中的断言检查了一个随机选择的元素是否在0到9的范围内,而test_runTest2()方法中则模拟了一个需要进行排序的测试,并期望排序后的结果与一个列表范围匹配。如果排序方法出错,则通过self.assertRaises...

    XCTest-master.zip

    例如,`XCTAssertEqual`可以用来比较两个值是否相等,如果实际结果与期望不符,测试就会失败。 3. **setUp和tearDown方法**:每个测试用例类可以包含`setUp`和`tearDown`方法。`setUp`在每个测试方法执行前调用,...

    gmock相关资料和笔记

    gmock允许开发者创建行为模拟,使得测试可以独立于实际的依赖进行,从而提高测试的覆盖率和质量。下面我们将深入探讨gmock的核心概念、用法以及如何在实践中应用它。 1. **gmock基础** - gmock是Google Mock库的...

    junit mock

    Test方法通常以"test"开头,用于执行特定的测试操作并使用断言(assert)来验证结果。例如,`assertEquals`用于比较期望值和实际值是否相等,`assertFalse`则用于验证某个条件是否为假。 JUnit4.0引入了注解...

    cppunit-1.12.0

    要使用cppunit,首先需要将其正确地集成到你的C++项目中,然后创建测试类,继承`cppunit::TestFixture`,并覆盖`setUp`和`tearDown`方法来准备和清理测试环境。接着,编写具体的测试方法,每个方法都对应一个测试...

Global site tag (gtag.js) - Google Analytics