`
diqizhan
  • 浏览: 147335 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

多态的2个缺陷

    博客分类:
  • java
阅读更多
最近在研读<<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";
	}
}



1
1
分享到:
评论

相关推荐

    面向对象的软件缺陷管理

    2. **缺陷分类和优先级设置**:根据缺陷的严重程度和影响范围,将其分类并设置优先级,便于资源分配和处理顺序。 3. **缺陷验证**:开发团队收到报告后,需要验证缺陷是否真实存在,并确认其具体原因。 4. **缺陷...

    C语言实现C++继承和多态的代码分享

    * 通过函数指针模拟多态,但是存在一些缺陷,例如父子各自的函数指针需要单独定义。 5. C++中的多态实现: * 使用虚函数来实现多态。 * 父类的指针或者引用可以指向子类的对象。 * 子类需要重写父类的虚函数。...

    PHP的缺陷及对系统开发的影响.pdf

    缺陷二:不良的递归支持 PHP的递归支持不良,递归是一种函数直接或间接调用自身的机制,这是强大的特性,可以把某些复杂的东西变得简单。PHP的递归支持不良,限制了其应用。 缺陷三:不是线程安全的 许多 PHP ...

    基于粒子群优化SVM的面向对象软件缺陷预测模型_朱朝阳2

    面向对象软件设计是电力信息系统软件开发的核心,它通过抽象、封装、继承和多态等特性,构建复杂系统的结构和功能模型。 模型的构建分为三个关键步骤: 1. **预处理模块**:首先,原始数据需要进行归一化处理,...

    java面试笔试题集合

    - **代码共享**:通过继承和多态,可以在多个类之间共享代码,减少代码重复。 - **解决同名问题**:多态性很好地解决了应用程序中函数同名的问题。 #### 二、String是不是最基本的数据类型? **基本数据类型**:...

    C++编程思想习题

    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的缺陷检测系统,包括图像检测以及目标检测两个部分.zip

    该项目是一个基于QT+yolov5s的缺陷检测系统,用于图像检测和目标检测。QT是一个流行的C++图形用户界面库,而yolov5s是YOLO(You Only Look Once)系列目标检测算法的一个轻量级版本,尤其适用于实时应用。下面我们将...

    免费_华为C++培训教程.doc

    多继承允许一个类继承多个基类,但可能导致菱形问题,即当一个派生类有多个基类,且这些基类有一个共同的基类时,可能出现二义性。解决菱形缺陷通常使用虚继承。`this`跳转是C++中处理多继承时的一种技巧,用来在...

    阿里巴巴最新算法工程师笔试题.pdf

    我们需要计算两个同学的代码缺陷率,并根据缺陷率来预测程序的可靠性。 8. 硬盘读写和SSD: 知识点:计算机系统、存储系统 在这个问题中,我们需要了解计算机系统和存储系统的基本概念,例如硬盘和SSD的读写机制...

    全国计算机等级考试四级软件测试工程师模拟试题以及参考答案

    这表明,如果在一个功能区域发现了多个缺陷,那么这个区域可能存在更多的未发现缺陷,因此需要更加仔细地测试。 ### 等价类划分法 等价类划分法是一种黑盒测试技术,用于减少测试用例的数量,同时保持测试的有效性...

    浅析PHP与ASP.NET的优劣性.pdf

    ASP.NET 是一个完整的框架,提供了真实的面向对象编程(OOP)和继承、多态和封装的支持。它的优势在于简洁的设计和实施,使得编程人员可以充分发挥自己的技能。但是,ASP.NET 也存在一些缺陷,如高内存使用率和执行...

    C++事件委托

    但是,这种实现方式有一个缺陷,即当B的OnEvent函数需要调用另外的函数或者其他对象的函数时,就不得不对OnEvent函数作出改动。 2.2 多态版实现 为了解决基础版实现的缺陷,我们可以使用C++的多态机制来实现事件...

    软件测试知识点(3).docx

    封装、继承、多态是面向对象编程的三个基本特征,对软件测试产生了重要的影响。封装使对象的属性和方法结合成一个整体,使测试结构的分析、测试路径的选取、测试数据的生成等变得困难。继承使类之间产生联系,子类...

    华为c++中级培训教程

    - **菱形缺陷**: 当一个派生类从两个或多个继承自同一个类的基类继承时,就会出现菱形继承问题。这种情况下,派生类可能会接收到多个版本的基类数据成员,导致数据冗余和不一致。 - **this指针跳转**: 在多继承的...

    深入浅出设计模式(中文版电子版)

    2.6Polymorphism(多态) 18 2.7PureFabrication(纯虚构) 19 2.8Indirection(间接) 20 2.9ProtectedVariations(受保护变化) 21 第3章GoF-CreationalDesignPatterns创建型设计模式 23 3.1...

Global site tag (gtag.js) - Google Analytics