最近在研读<<Thinking in Java>>......
多态的2个缺陷,其一:对私有方法的“覆盖”。只有非private方法才可以覆盖,因为private方法会被自动默认为是final方法。
public class Father {
private void f() {
System.out.println("Father's f()");
}
public void p() {
System.out.println("Father's p()");
}
public static void main(String[] args) {
Father f = new Sun();
f.f();//Father's f()
f.p();//Sun's p()
}
}
class Sun extends Father {
public void f() {
System.out.println("Sun's f()");
}
public void p() {
System.out.println("Sun's p()");
}
}
其二:域与静态方法不具多态性。因为域是分配有存储空间的,父类与子类的域名虽然相同,但其存储空间不同。静态方法也同样道理。
public class FieldAccess {
public static void main(String[] args) {
Super sup = new Sub();
System.out.println(sup.field);//0
System.out.println(sup.getField());//1
System.out.println(sup.dynamicGet());//Sub's dynamicGet
System.out.println(sup.staticGet());//Super's staticGet
Sub sub = new Sub();
System.out.println(sub.field);//1
System.out.println(sub.getField());//1
System.out.println(sub.getSuperField());//0
}
}
class Super {
public int field = 0;
public int getField() {
return field;
}
public String dynamicGet() {
return "Super's dynamicGet";
}
public static String staticGet() {
return "Super's staticGet";
}
}
class Sub extends Super {
public int field = 1;
public int getField() {
return field;
}
public int getSuperField() {
return super.field;
}
public String dynamicGet() {
return "Sub's dynamicGet";
}
public static String staticGet() {
return "Sub's staticGet";
}
}
分享到:
相关推荐
2. **缺陷分类和优先级设置**:根据缺陷的严重程度和影响范围,将其分类并设置优先级,便于资源分配和处理顺序。 3. **缺陷验证**:开发团队收到报告后,需要验证缺陷是否真实存在,并确认其具体原因。 4. **缺陷...
* 通过函数指针模拟多态,但是存在一些缺陷,例如父子各自的函数指针需要单独定义。 5. C++中的多态实现: * 使用虚函数来实现多态。 * 父类的指针或者引用可以指向子类的对象。 * 子类需要重写父类的虚函数。...
- **继承与多态**:虽然这些特性有助于代码的复用和灵活性,但过多的继承层次会导致运行时查找虚函数的开销增加。 2. **内存消耗**: - **对象实例化**:每个对象实例都需要占用一定的内存空间,特别是当对象包含...
面向对象软件设计是电力信息系统软件开发的核心,它通过抽象、封装、继承和多态等特性,构建复杂系统的结构和功能模型。 模型的构建分为三个关键步骤: 1. **预处理模块**:首先,原始数据需要进行归一化处理,...
首先,让我们来看看PHP的一个核心缺陷:不支持多态。多态是面向对象编程中的一个高级特性,它允许程序员通过一个共同的接口,来操作不同类型的对象。这种特性使得程序更加灵活,易于扩展。由于PHP没有内置对多态的...
- **代码共享**:通过继承和多态,可以在多个类之间共享代码,减少代码重复。 - **解决同名问题**:多态性很好地解决了应用程序中函数同名的问题。 #### 二、String是不是最基本的数据类型? **基本数据类型**:...
16.3向上映射的二义性 16.4虚基类 16.4.1“最晚辈派生”类和虚基初始化 16.4.2使用缺省构造函数向虚基“警告” 16.5开销 16.6向上映射 16.7避免MI 16.8修复接口 16.9小结 16.10练习 第17章 异常处理 17.1C语言的出错...
该项目是一个基于QT+yolov5s的缺陷检测系统,用于图像检测和目标检测。QT是一个流行的C++图形用户界面库,而yolov5s是YOLO(You Only Look Once)系列目标检测算法的一个轻量级版本,尤其适用于实时应用。下面我们将...
多继承允许一个类继承多个基类,但可能导致菱形问题,即当一个派生类有多个基类,且这些基类有一个共同的基类时,可能出现二义性。解决菱形缺陷通常使用虚继承。`this`跳转是C++中处理多继承时的一种技巧,用来在...
我们需要计算两个同学的代码缺陷率,并根据缺陷率来预测程序的可靠性。 8. 硬盘读写和SSD: 知识点:计算机系统、存储系统 在这个问题中,我们需要了解计算机系统和存储系统的基本概念,例如硬盘和SSD的读写机制...
这表明,如果在一个功能区域发现了多个缺陷,那么这个区域可能存在更多的未发现缺陷,因此需要更加仔细地测试。 ### 等价类划分法 等价类划分法是一种黑盒测试技术,用于减少测试用例的数量,同时保持测试的有效性...
ASP.NET 是一个完整的框架,提供了真实的面向对象编程(OOP)和继承、多态和封装的支持。它的优势在于简洁的设计和实施,使得编程人员可以充分发挥自己的技能。但是,ASP.NET 也存在一些缺陷,如高内存使用率和执行...
但是,这种实现方式有一个缺陷,即当B的OnEvent函数需要调用另外的函数或者其他对象的函数时,就不得不对OnEvent函数作出改动。 2.2 多态版实现 为了解决基础版实现的缺陷,我们可以使用C++的多态机制来实现事件...
封装、继承、多态是面向对象编程的三个基本特征,对软件测试产生了重要的影响。封装使对象的属性和方法结合成一个整体,使测试结构的分析、测试路径的选取、测试数据的生成等变得困难。继承使类之间产生联系,子类...
- **菱形缺陷**: 当一个派生类从两个或多个继承自同一个类的基类继承时,就会出现菱形继承问题。这种情况下,派生类可能会接收到多个版本的基类数据成员,导致数据冗余和不一致。 - **this指针跳转**: 在多继承的...
2.6Polymorphism(多态) 18 2.7PureFabrication(纯虚构) 19 2.8Indirection(间接) 20 2.9ProtectedVariations(受保护变化) 21 第3章GoF-CreationalDesignPatterns创建型设计模式 23 3.1...